gpt4 book ai didi

.net - 有什么理由只使用静态成员而不是静态成员的非静态类?

转载 作者:行者123 更新时间:2023-12-01 04:55:35 27 4
gpt4 key购买 nike

昨天我在接受采访,其中一个问题是什么是单例以及如何实现它。

MSDN's implementation

来自 MSDN 的解决方案#1:

using System;

public class Singleton
{
private static Singleton instance;

private Singleton() {}

public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}

我给出了最简单的解决方案(msdn 实现中的第 1 号解决方案),而他想要线程安全的解决方案(第 3 号解决方案)。

来自 MSDN 的解决方案 #3:

using System;

public sealed class Singleton
{
private static volatile Singleton instance;
private static object syncRoot = new Object();

private Singleton() {}

public static Singleton Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
instance = new Singleton();
}
}

return instance;
}
}
}

令我感兴趣的是msdn 示例中的private 构造函数。我不知道有这样的事情存在。

看看msdn on it

public class Counter
{
private Counter() { }
public static int currentCount;
public static int IncrementCount()
{
return ++currentCount;
}
}

然后我问:

为什么你会有一个只有静态成员的类,因此想阻止创建它的实例,从而阻止使用私有(private)构造函数 - 而不是使类成为静态的?!

P.S.: 问题不是关于单例 - 是关于描述一个场景,在这个场景中我会选择创建一个只有静态成员的可实例化类(因此最终创建对私有(private)构造函数的需求)而不是使用静态类。

最佳答案

Why would you have a class that has only static members and thus would like to prevent instances of it being created and hence the use for a private constructor - instead of making the class static

在静态类上使用单例的主要区别在于,您可以在前者上实现接口(interface),并在不绑定(bind)到单例的具体实现细节的情况下传递它,而静态类则不能。

除此之外,单例实例变量需要是静态的,并且可以作为常规实例成员公开。

关于.net - 有什么理由只使用静态成员而不是静态成员的非静态类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36129930/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com