如何使整个应用程序的全局类?

时间:2008-10-08 23:04:53

标签: c# .net

我想在我的应用程序中到处访问一个类,我该怎么做?

为了更清楚,我有一个使用某些代码的类。我有一个使用相同代码的其他类。我不想复制所以我想通过使用某些东西在两个地方调用相同的代码。在php中我只会包含(“abc.php”)...我不想每次想要使用代码时创建对象。

4 个答案:

答案 0 :(得分:5)

您想要从任何地方访问该类或访问该类的实例吗?

您可以将其设为静态课程 - public static class MyClass { } - 或者您可以使用Singleton Pattern

对于最简单形式的单例模式,您可以简单地向类(或其他类)添加一个静态属性,该类返回类的相同实例,如下所示:

public class MyClass
{
     private static MyClass myClass;

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

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

答案 1 :(得分:4)

C#中的全局类的概念实际上只是引用包含该类的适当程序集的简单问题。一旦引用了所需的程序集,就可以通过它的完全限定的类型名称或通过导入包含该类的名称空间来引用所选的类。 (具体实例或静态访问到该类)

或者

您可以使用 Singleton类在任何地方使用它,但有些人不建议您这样继续。

答案 2 :(得分:1)

您使用静态类或单例模式的其他答案是正确的。

但请注意,这样做会损害您的测试能力。通常,如果可以的话,更喜欢依赖注入全局访问的类。我知道这并非总是可行(或实际)。

就此而言,您还应该查看abstract factory pattern。它允许您拥有一个众所周知的工厂类,它可以生成您正在使用的类的实际实例。例如,要拥有全局访问的日志记录类,请不要直接创建日志记录类。而是使用日志工厂为您创建它并将接口返回到日志记录类。这样,交换进出不同的日志记录类就更容易了。

答案 3 :(得分:1)

既然你不想每次都创建这个对象,听起来你正在谈论某种实用方法......

我建议您在程序集中使用static methods,您可以在需要的地方引用