相关疑难解决方法(0)

如何在C#中实现单例?

如何在C#中实现单例模式?我想把我的常量和一些基本功能放在其中,因为我在我的项目中使用它们.我想让它们'全局',而不需要手动绑定它们我创建的每个对象.

.net c# singleton

25
推荐指数
4
解决办法
2万
查看次数

.NET的一个明显的单例实现?

我在考虑懒惰单例初始化的经典问题 - 完全无效的问题:

if (instance == null)
{
    instance = new Foo();
}
return instance;
Run Code Online (Sandbox Code Playgroud)

任何知道Singleton是什么的人都熟悉这个问题(你只需要if一次).这是微不足道的,但很刺激.

所以,我想到了一个替代解决方案,至少对于.NET来说(尽管它应该可以在任何具有等效功能指针的地方工作:

public class Foo
{
    private delegate Foo FooReturner();

    private static Foo innerFoo;

    private static FooReturner fooReturnHandler = new FooReturner(InitialFooReturner);

    public static Foo Instance
    {
        get
        {
            return fooReturnHandler();
        }
    }
    private static Foo InitialFooReturner()
    {
        innerFoo = new Foo();
        fooReturnHandler = new FooReturner(NewFooReturner); 
        return innerFoo;
    }

    private static Foo NewFooReturner()
    {
        return innerFoo;
    }

}
Run Code Online (Sandbox Code Playgroud)

简而言之 - Instance返回一个委托方法.委托最初设置为初始化实例的方法,然后将委托更改为指向简单的Return方法.

现在,我喜欢认为我的工作并不可怕,但我并不担心自己很棒.我没有在任何地方看到这个代码的例子.

因此,我得出结论,我错过了一些东西.重要的东西.要么整个​​问题太过微不足道,要么不必考虑太多,或者这会造成毁灭宇宙的可怕事情.或者我在搜索时失败,因此没有看到数百名开发人员使用这种方法.无论如何,还有什么.

我希望Stack Overflow这里的优秀人员可以让我知道什么(除了关于是否应该使用Singleton的争议).

编辑澄清: …

.net c# singleton

19
推荐指数
2
解决办法
3424
查看次数

如何制作通用的单例基类C#

我正在尝试创建一个通用的单例基类

public class SingletonBase<T> where T : class, new()
{
    private static object lockingObject = new object();
    private static T singleTonObject;
    protected SingletonBase()
    {

    }

    public static T Instance
    {
        get
        {
            return InstanceCreation();
        }
    }
    public static T InstanceCreation()
    {
        if(singleTonObject == null)
        {
             lock (lockingObject)
             {
                  if(singleTonObject == null)
                  {
                       singleTonObject = new T();
                  }
             }
        }
        return singleTonObject;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我必须将构造函数作为派生的公共构造函数.

public class Test : SingletonBase<Test>
{
    public void A()
    {

    }
    private Test()
        : base()
    { …
Run Code Online (Sandbox Code Playgroud)

c# generics singleton

5
推荐指数
1
解决办法
9322
查看次数

参数及其在方法中的使用如何影响静态/实例设计决策?

只是一个简单的问题:

我已经读过,当一个类不修改它的实例时,它应该是静态的.因此,如果我有一个名为Account的类,并且它具有Id,Duration等属性,并且这些属性不会被类修改,那么这可以是静态的,否则它应该保持静态.

这个(实例本身,通过其属性,是否变异)如何影响静态/实例决策?

此外,如果一个类需要加载参数(比如这个Account类,坚持我们的类比),但不修改实例(因此没有Account变量更改 - 没有像Account.x = y //其中y来自另一个类) ,我认为这仍然是静态的?因此,不是参数是一个问题或它们来自哪里,它们是做什么的?

如果它是一个属性,同样的原则适用于决定使一个字段静态或不是(如果字段持有的数据将是昂贵的,然后有一个字段持有它 - 静态 - 如果我错了纠正我).

我注意到在C#上有超过100个静态方法的线程(这是一个静态的方法,因为它处理参数),我将阅读所有这些,因为有很好的问题和好的答案.

谢谢

c# static static-methods

0
推荐指数
1
解决办法
278
查看次数

标签 统计

c# ×4

singleton ×3

.net ×2

generics ×1

static ×1

static-methods ×1