C# 中的静态与单例
本文关键字:单例 静态 | 更新日期: 2023-09-18 20:35:29
您学习了what is singleton design pattern以及如何创建单一实例类。在这里,您将了解静态类和单例类之间的区别。
静态类可以是单一实例类。例如,以下VoteMachine
类是一个静态类,它充当单例类来注册用户的投票。
示例: Singleton Class
public class VoteMachine
{
private static int _totalVotes = 0;
static VoteMachine()
{
}
public static void RegisterVote()
{
_totalVotes += 1;
Console.WriteLine("Registered Vote #" + _totalVotes);
}
public static int TotalVotes
{
get
{
return _totalVotes;
}
}
}
它将在多线程方案中给出正确的结果,如下所示。
示例:
public class Program
{
public static void Main()
{
var numbers = Enumerable.Range(0, 10);
Parallel.ForEach(numbers, i =>
{
VoteMachine.RegisterVote();
});
Console.WriteLine(VoteMachine.TotalVotes);
}
}
因此,静态类可以是单例类。它是线程安全的并且性能良好,因为我们不需要使用锁。
但是,有什么区别呢?我们根本不需要创建一个单例类吗?
下面列出了静态类和单一实例类之间的区别:
Static Class | Singleton Class |
---|---|
不能继承其他类中的静态类。无多态性。 | 可以通过具有受保护的构造函数来继承和扩展单例类。 |
无法实现接口。 | 可以实现接口。 |
无法创建实例并将其分配给另一个变量。 | 可以创建一个实例并将其分配给多个变量。 |
不能作为参数传递给方法。 | 可以作为参数传递。 |
无法序列化。 | 可以序列化。 |