2014-01-08 42 views
0

所以我有一堂课。如何使全局在C#中实现一个实例?

我然后作出一个实例的地方:

Class1 somesinstance = new Class1; 

现在我想在任何地方访问这个实例中,这可能吗?

+2

要么让类为'static'或遵循单例模式。 –

+1

使用[Singleton pattern](http://en.wikipedia.org/wiki/Singleton_pattern)是可能的,但它被忽视,因为它通常(并不总是)设计不好。 – Rik

回答

3

啊,难以捉摸的单例模式。

如果你有一点点空闲时间,我会强烈建议乔恩斯基特的文章的主题:http://csharpindepth.com/Articles/General/Singleton.aspx

下面是一个简单的例子:

public sealed class YourSingleton 
{ 
    private static readonly YourSingleton instance = new YourSingleton(); 

    static YourSingleton() {} 

    private YourSingleton() { } 

    public static YourSingleton Instance 
    { 
     get { return instance ; } 
    } 
} 
0

如果你只需要一个实例,使用Singleton模式:

public class Class1 
{ 
    private Class1() 
    { 
     ... 
    } 


    private static readonly Class1 _instance = new Class1(); 

    public static Class1 Instance { get { return _instance; } } 
} 

和访问这样的实例:

Class1.Instance 

否则,只公开为一个类中的静态属性。

0

如果您随时随地的意思是你的解决方案 - 您可以使用一个静态类,静态属性

public static class Shared 
{ 
    private static Class1 _myclass; 

    public static Class1 MyClass{ 
     get 
     { 
      return _myclass??(_myclass=new Class1()); 
     } 
    } 
} 
0

可以Singleton模式如下:

public class MyClass 
{ 
    private static MyClass myClass; 

    public static MyClass MyClassInstance 
    { 
      get { return myClass ?? (myClass = new MyClass()); } 
    } 

    private MyClass() 
    { 
      //private constructor makes it where this class can only be created by itself 
    } 
} 

实例然后可全局访问像

MyClass.MyClassInstance 
0

您可以创建一个静态类,其中包含可从应用程序中的每个类访问的共享实例。

public static class SharedResources 
{ 
    public static Class1 obj1 {get; set;} 
    public static Class2 obj2 {get; set;} 

    // ... 
}