我使用一个以上的班级,我需要一个......可以说,所有的类和方法的全球存储。 它是创建存储静态类的正确方法?
public static class Storage
{
public static string filePath { get; set; }
}
还是有其他的方法来做到这一点?
我使用一个以上的班级,我需要一个......可以说,所有的类和方法的全球存储。 它是创建存储静态类的正确方法?
public static class Storage
{
public static string filePath { get; set; }
}
还是有其他的方法来做到这一点?
如果你真的需要让你的例子单身那么这里是你如何做到这一点。
public class StorageSingleton
{
private static readonly StorageSingleton instance;
static StorageSingleton() {
instance = new Singleton();
}
// Mark constructor as private as no one can create it but itself.
private StorageSingleton()
{
// For constructing
}
// The only way to access the created instance.
public static StorageSingleton Instance
{
get
{
return instance;
}
}
// Note that this will be null when the instance if not set to
// something in the constructor.
public string FilePath { get; set; }
}
调用和设置单的方式如下:
// Is this is the first time you call "Instance" then it will create itself
var storage = StorageSingleton.Instance;
if (storage.FilePath == null)
{
storage.FilePath = "myfile.txt";
}
另外,您可以添加到构造以下,以避免空引用异常:
// Mark constructor as private as no one can create it but itself.
private StorageSingleton()
{
FilePath = string.Empty;
}
提醒一句; 做任何全局或单将打破从长远来看,你的代码。 后来你真的应该被检查出库模式。
你可以考虑使用Singleton设计模式: 实现辛格尔顿在C#
例如。
using System;
public class Singleton
{
private static Singleton instance;
private Singleton() {}
public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}
你应该有一个看仓库的模式:
http://martinfowler.com/eaaCatalog/repository.html
实现这种模式的一种方法是通过使用ORM的SA的NHibernate的:
https://web.archive.org/web/20110503184234/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/10/08/the-repository-pattern.aspx
应用辛格尔顿到您的原班:
public class Storage
{
private static Storage instance;
private Storage() {}
public static Storage Instance
{
get
{
if (instance == null)
{
instance = new Storage();
}
return instance;
}
}
public string FilePath { get; set; }
}
用法:
string filePath = Storage.Instance.FilePath;
我喜欢看到单身的C#,落实。
public class Singleton
{
public static readonly Singleton instance;
static Singleton()
{
instance = new Singleton();
}
private Singleton()
{
//constructor...
}
}
C#中,你将有它的使用在第一时间在你的静态属性实例化的保证您的实例不会被覆盖,你的静态构造函数的保证。
奖励:这是线程按照语言设计,静态构造函数,没有双重检查锁定:)。