C#静态类为何使用?

可能重复:
何时在C#中使用静态类

我将我的类设置为静态很多,但我不确定何时使用静态或不使用静态或不同之处。

有人可以解释一下吗?

使类静态只会阻止人们尝试创建它的实例。 如果你的所有类都是静态成员,那么将类本身设置为静态是一个好习惯。

如果一个类声明为static,那么变量和方法应强制声明为static。

可以将类声明为static,表示它只包含静态成员。 使用new关键字无法创建静态类的实例。 当加载包含类的程序或命名空间时,.NET Framework公共语言运行库(CLR)会自动加载静态类。

使用静态类来包含与特定对象无关的方法。 例如,创建一组不对实例数据起作用且与代码中的特定对象无关的方法是一种常见的要求。 您可以使用静态类来保存这些方法。

– >静态类的主要特性是:

  • 它们只包含静态成员。
  • 它们无法实例化。
  • 他们是密封的。
  • 它们不能包含实例构造函数或简单构造函数,因为我们知道它们与对象关联,并在创建对象时对数据进行操作。

static class CollegeRegistration { //All static member variables static int nCollegeId; //College Id will be same for all the students studying static string sCollegeName; //Name will be same static string sColegeAddress; //Address of the college will also same //Member functions public static int GetCollegeId() { nCollegeId = 100; return (nCollegeID); } //similarly implementation of others also. } //class end public class student { int nRollNo; string sName; public GetRollNo() { nRollNo += 1; return (nRollNo); } //similarly .... public static void Main() { //Not required. //CollegeRegistration objCollReg= new CollegeRegistration(); //. int cid= CollegeRegistration.GetCollegeId(); string sname= CollegeRegistration.GetCollegeName(); } //Main end } 

静态类在某些情况下很有用,但是像大多数语言function一样,有可能滥用和/或过度使用它们。

正如Dylan Smith已经提到的,使用静态类的最明显的例子是如果你有一个只有静态方法的类。 允许开发人员实例化这样的类是没有意义的。

需要注意的是,过多的静态方法本身可能表明您的设计策略存在缺陷。 我发现当你创建一个静态函数时,问自己是一件好事 – 它是否更适合作为a)实例方法,或b)接口的扩展方法。 这里的想法是对象行为通常与对象状态相关联,这意味着行为应该属于对象。 通过使用静态函数,您暗示该行为不应属于任何特定对象。

过度使用静态函数会阻碍多态和接口驱动的设计 – 它们不能在派生类中重写,也不能连接到接口。 通常通过扩展方法将“辅助”function绑定到接口更好,这样接口的所有实例都可以访问共享的“帮助”function。

在我看来,静态函数绝对有用的一种情况是创建.Create()或.New()方法来实现对象创建的逻辑,例如当你想代理正在创建的对象时,

 public class Foo { public static Foo New(string fooString) { ProxyGenerator generator = new ProxyGenerator(); return (Foo)generator.CreateClassProxy (typeof(Foo), new object[] { fooString }, new Interceptor()); } 

这可以与代理框架(如Castle Dynamic Proxy)一起使用,您可以在其中根据分配给其方法的某些属性拦截/注入function到对象中。 总的想法是你需要一个特殊的构造函数,因为从技术上讲,你正在创建一个具有特殊附加function的原始实例的副本。