好的,所以我知道你不能在静态类中拥有对象,但我需要一个可以容纳可从不同类访问的对象的类。我正在制作一个dll,它将为另一个程序提供扩展功能,所以我不能只是继承或传递类。如果需要,我可以只是使每个对象的属性我需要在静态类,这将工作,但不是我想要的友好。谁有关于如何完成这样的事情的任何其他想法?
答案 0 :(得分:12)
实际上,你可以在静态类中拥有对象 - 它们只需要是静态对象。
例如:
public static class SharedObjects
{
private static MyClass obj = new MyClass();
public static MyClass GetObj()
{
return obj;
}
}
从程序的其他地方,您可以调用实例方法/属性/等:
SharedObjects.GetObj().MyInstanceMethod();
答案 1 :(得分:0)
一个选项是让一个类具有访问静态对象(或多个对象)的访问器方法。系统的其他部分可以将该类用作静态或非静态。这是代码:
public class GlobalInformation {
public static GlobalInformation CreateInstance() {
// Factory method through GlobalInformmation.CreateInstance()
return new GlobalInformation();
}
public GlobalInformation() {
// Regular use through new GlobalInformation()
}
static GlobalInformation() {
// Static initializer called once before class is used.
// e.g. initialize values:
_aString = "The string value";
}
public string AccessAString {
get {
return _aString;
}
}
public Foo AccessAnObject() {
return _anObject;
}
private static string _aString;
private static readonly Foo _anObject = new Foo();
}
系统的其他部分将按如下方式使用它。选项1:
var globalInfo = GlobalInformation.CreateInstance();
var aString = globalInfo.AssessAString;
var anObj = globalInfo.AccessAnObject();
选项2:
var globalInfo = new GlobalInformation();
var aString = globalInfo.AssessAString;
var anObj = globalInfo.AccessAnObject();
选项2将是我的首选(我将删除静态工厂方法CreateInstance()
),因为您可以随时更改实现,包括使(某些)字段非静态。 显示在共享数据时会成为常规类。