C# static class why use?
Possible Duplicate:
When to Use Static Classes in C#
我经常将类设置为静态的,但我不确定何时使用静态的或不使用静态的,也不知道使用静态的和不使用静态的有什么区别。
有人能解释一下吗?
使类成为静态的,只是防止人们试图创建它的实例。如果您的类中所有的成员都是静态的,那么最好将类本身设置为静态的。
如果一个类被声明为静态的,那么变量和方法应该被强制声明为静态的。
类可以声明为静态的,表示它只包含静态成员。不能使用new关键字创建静态类的实例。加载包含类的程序或命名空间时,.NET框架公共语言运行库(CLR)会自动加载静态类。
使用静态类包含不与特定对象关联的方法。例如,通常需要创建一组方法,这些方法不作用于实例数据,也不与代码中的特定对象相关联。可以使用静态类来保存这些方法。
->静态类的主要特征是:
- 它们只包含静态成员。
- 它们不能被实例化。
- 它们是密封的。
- 它们不能包含实例构造函数或简单的构造函数,因为我们知道它们与对象关联,并且在创建对象时对数据进行操作。
例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | 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(); //<ClassName>.<MethodName> int cid= CollegeRegistration.GetCollegeId(); string sname= CollegeRegistration.GetCollegeName(); } //Main end } |
静态类在某些情况下可能是有用的,但是有可能滥用和/或过度使用它们,就像大多数语言特征一样。
正如Dylan Smith已经提到的,使用静态类最明显的情况是,如果只有一个类,只有静态方法。允许开发人员实例化这样的类是没有意义的。
需要注意的是,过多的静态方法本身可能意味着你的设计策略的缺陷。我发现当您创建一个静态函数时,最好问问自己——它是否更适合于a)实例方法,或b)接口的扩展方法。这里的想法是,对象行为通常与对象状态相关联,这意味着行为应该属于对象。通过使用静态函数,您可以暗示行为不应属于任何特定对象。
多态和接口驱动的设计受到过度使用静态函数的阻碍——它们不能在派生类中被重写,也不能附加到接口上。通常最好是通过扩展方法将"helper"函数绑定到接口,这样接口的所有实例都可以访问共享的"helper"功能。
在我看来,静态函数绝对有用的一种情况是,创建一个.create()或.new()方法来实现对象创建的逻辑,例如,当您希望代理正在创建的对象时,
1 2 3 4 5 6 7 8 9 |
这可以与代理框架(如Castle动态代理)一起使用,在该框架中,您希望截获/注入对象中的功能,例如,分配给对象方法的某些属性。总的来说,您需要一个特殊的构造函数,因为从技术上讲,您正在创建一个具有特殊添加功能的原始实例的副本。