C# 使用函数获取实例而不是 "new"
C# Using a function to get instance instead of "new"
习惯了一些新代码并有一个问题。总而言之,我看到了以下内容
file1.cs :
MyClass myInstance = MyClass.Instance();
...然后在 MyClass 的定义中有...
MyClass.cs :
public class MyClass {
// etc. etc.
static readonly MyClass _instance = new MyClass();
public static MyClass Instance() {
return _instance;
}
// etc. etc.
}
这样做的原因是什么而不是 file1.cs:
MyClass myInstance = new MyClass();
?
因为它使用单吨模式,这就是原因...
阅读:Singleton - 单例模式是一种设计模式,用于确保class只能有一个并发实例。每当需要额外的单例对象 class 时,就会提供先前创建的单实例。
这是单例模式。这就是为什么使用方法来获取实例的原因。
当我们只想在我们的应用程序中使用 class 的一个实例时,使用单例模式。我们不希望我们应用程序的消费者有权构建多个实例。
关于单例模式的详细说明,请看here。
这是一个 "singleton pattern" 你可以在这里阅读
http://csharpindepth.com/Articles/General/Singleton.aspx
这是一个单例模式 有时新实例并不是做某事的最佳方式。
这方面的一个例子是记录器。不需要在每次需要时都实例化记录器,因此单例模式很有用。
关于单身人士的另一种理论...
当您希望应用程序的不同部分共享一个公共对象时,您也可以使用它。有时您可能需要强制将静态class转换为单例,以便您可以使用if进行数据绑定(静态class不能绑定)。
一些与应用程序生命周期一样长的典型单例可以是设置、某种缓存、带有文件观察器的背景文件上传器等...
我建议您使用 属性 而不是函数。它更干净,更方便调试和模拟测试。
请注意,通过使用静态构造函数(正如您已经在做的那样),_instance
的初始化是线程安全的。
注意:其他方法的实现不应该是静态的。
在下面找到单例模式的完整实现:
public class MyClass
{
static MyClass _instance = new MyClass();
public static MyClass Instance
{
get
{
return _instance;
}
set { _instance = value; }
}
public void DoStuff()
{
//etc...
}
private MyClass()
{
}
}
并且您可以这样在其他 类 中使用它:
MyClass.Instance.DoStuff();
习惯了一些新代码并有一个问题。总而言之,我看到了以下内容
file1.cs :
MyClass myInstance = MyClass.Instance();
...然后在 MyClass 的定义中有...
MyClass.cs :
public class MyClass {
// etc. etc.
static readonly MyClass _instance = new MyClass();
public static MyClass Instance() {
return _instance;
}
// etc. etc.
}
这样做的原因是什么而不是 file1.cs:
MyClass myInstance = new MyClass();
?
因为它使用单吨模式,这就是原因...
阅读:Singleton - 单例模式是一种设计模式,用于确保class只能有一个并发实例。每当需要额外的单例对象 class 时,就会提供先前创建的单实例。
这是单例模式。这就是为什么使用方法来获取实例的原因。
当我们只想在我们的应用程序中使用 class 的一个实例时,使用单例模式。我们不希望我们应用程序的消费者有权构建多个实例。
关于单例模式的详细说明,请看here。
这是一个 "singleton pattern" 你可以在这里阅读 http://csharpindepth.com/Articles/General/Singleton.aspx
这是一个单例模式 有时新实例并不是做某事的最佳方式。
这方面的一个例子是记录器。不需要在每次需要时都实例化记录器,因此单例模式很有用。
关于单身人士的另一种理论...
当您希望应用程序的不同部分共享一个公共对象时,您也可以使用它。有时您可能需要强制将静态class转换为单例,以便您可以使用if进行数据绑定(静态class不能绑定)。
一些与应用程序生命周期一样长的典型单例可以是设置、某种缓存、带有文件观察器的背景文件上传器等...
我建议您使用 属性 而不是函数。它更干净,更方便调试和模拟测试。
请注意,通过使用静态构造函数(正如您已经在做的那样),_instance
的初始化是线程安全的。
注意:其他方法的实现不应该是静态的。
在下面找到单例模式的完整实现:
public class MyClass
{
static MyClass _instance = new MyClass();
public static MyClass Instance
{
get
{
return _instance;
}
set { _instance = value; }
}
public void DoStuff()
{
//etc...
}
private MyClass()
{
}
}
并且您可以这样在其他 类 中使用它:
MyClass.Instance.DoStuff();