如何在C#中全局访问实例?

时间:2014-01-08 15:56:20

标签: c# class oop instance

所以我上课了。

然后我在某个地方制作一个实例:

Class1 somesinstance = new Class1;

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

5 个答案:

答案 0 :(得分:3)

啊,难以捉摸的单身人士模式。

如果你有一点空闲时间,我强烈推荐Jon Skeet关于这个主题的文章: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 ; }
    }
}

答案 1 :(得分:0)

如果您只需要一个实例,请使用单例模式:

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


    private static readonly Class1 _instance = new Class1();

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

并像这样访问实例:

Class1.Instance

否则,只需将其作为类中的静态属性公开。

答案 2 :(得分:0)

如果您的任何地方意味着您的解决方案 - 您可以使用具有静态属性的静态类

public static class Shared
{
    private static Class1 _myclass;

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

答案 3 :(得分: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

答案 4 :(得分:0)

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

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

    // ...
}