C# 调用多个单例实例

C# 调用多个单例实例,c#,C#,我有一个像这样的单身班 class Singleton { private static Singleton _instance = new Singleton(); public string Username { get; set; } public string Password { get; set; } public static Singleton Instance { get { return _instance ?? (_

我有一个像这样的单身班

class Singleton
{
    private static Singleton _instance = new Singleton();
    public string Username { get; set; }
    public string Password { get; set; }

    public static Singleton Instance
    {
        get { return _instance ?? (_instance = new Singleton()); }
    }
}
像这样多次调用Singleton.Instance.X会影响性能吗

private void Method()
{
    Singleton.Instance.Username = "";
    Singleton.Instance.Password = "";
}
或者这更好(&为什么)

这种方法:

private void Method()
{
    Singleton singletoon = Singleton.Instance;
    singletoon.Username = "";
    singletoon.Password = "";
}
更好,因为您不在getter中执行if语句

在这种情况下:

private void Method()
{
    Singleton.Instance.Username = "";
    Singleton.Instance.Password = "";
}
调用getter两次,因此if条件(在本例中由“??”表示)

虽然性能上的差异非常微小,尤其是在您的场景中

顺便说一句,您正在静态初始化您的
单例
\u实例
,因此无需在getter中执行此操作

这种方法:

private void Method()
{
    Singleton singletoon = Singleton.Instance;
    singletoon.Username = "";
    singletoon.Password = "";
}
更好,因为您不在getter中执行if语句

在这种情况下:

private void Method()
{
    Singleton.Instance.Username = "";
    Singleton.Instance.Password = "";
}
调用getter两次,因此if条件(在本例中由“??”表示)

虽然性能上的差异非常微小,尤其是在您的场景中

顺便说一句,您正在静态初始化您的
单例
\u实例
,因此无需在getter中执行此操作

  • 实例中
    属性是没有意义的,因为您之前初始化了基础字段

  • 您不应该担心这里的性能,JIT编译器很可能会对其进行优化

  • 整个案例看起来像是过早的优化。您是否真的遇到过当前代码的问题

  • 更新

    回答评论中提出的问题:

    我会和你一起去

    private void Method()
    {
        Singleton singletoon = Singleton.Instance;
        singletoon.Username = "";
        singletoon.Password = "";
    }
    
    但不是因为性能,而是因为它更容易阅读

  • 实例中
    属性是没有意义的,因为您之前初始化了基础字段

  • 您不应该担心这里的性能,JIT编译器很可能会对其进行优化

  • 整个案例看起来像是过早的优化。您是否真的遇到过当前代码的问题

  • 更新

    回答评论中提出的问题:

    我会和你一起去

    private void Method()
    {
        Singleton singletoon = Singleton.Instance;
        singletoon.Username = "";
        singletoon.Password = "";
    }
    

    但这不是因为性能,而是因为它更易于阅读。

    因为您正在静态初始化
    \u实例
    ,所以不需要
    \u实例
    ,因此不需要
    。@RuneS更好的方法是避免无意义的条件语句(比如
    在这里)。我同意你的观点,我已经修复了它,但是我的意思是在我上面提到的2种编码风格和我更新了答案之间的更好方法。但不得不说,这主要是基于观点的。@RuneS更好的方法是避免无意义的条件语句(如
    在这里)。我同意你的观点,并且我已经解决了它,但是我的意思是,在我上面提到的2种编码风格和一般情况下我已经更新了我的答案之间,有更好的方法。但不得不说,这主要是基于观点的。