关于C#语言

C#中静态类的作用与意义,静态类为什么不能实例化。

静态类的作用就是前边加一个static?
我来告诉你静态类的作用与设计准则吧:
静态类是指仅包含静态成员的类(除了继承实例成员和专用的一个构造函数),C#从2.0开始支持,一个类声明为静态,它是密封、 抽象的可以重写任何实例成员,或将其声明。
静态类是纯粹的面向对象的设计和简单性的折衷。 它们通常用于提供指向其他操作的快捷方式 (如 System.IO.File),扩展方法或为其完整的面向对象的包装是没有保证的功能的持有者 (如 System.Environment)。
关于设计准则:
静态类应该谨慎使用,静态类应只可用作支持面向对象的框架的核心类。
不要认为静态类无所不包。
不要在静态类中声明实例成员(静态类是仅包含静态成员的类)。
静态类声明为密封的抽象类,并添加一个私有实例构造函数,如果您的编程语言不具有对静态类的内置支持。

静态类的定义/作用/设计规范都给你说明白了,所以你知道为什么静态类不能实例化——原因是静态类的设计就不是实例化的类,也不要说他是什么抽象的,静态的,就是设计一种不需要实例化的类,所以所有的成员都是静态成员。也不是因为什么没有构造函数(事实上他有,你也可以写上一个),也不是因为没有实例化成员(这只是其表现,一个普通类照样只定义其静态成员,照样可以实例化),真正的原因还是语言设计了这么一个不需要实例化的类,因为不需要实例化,所以静态类中若含实例化成员就没有任何意义了!
别把问题说反了——什么叫没有实例成员不能实例化,普通类只定义静态成员完全可行,可实例化的。什么是因为static声明,这是一个语言的关键词而已!
也有人说声明了static,所以不能实例化,事实上这个编译器在检查,声明static类,如果你去实例化,编译器会报错,现在如果编译器修改为省略该类错误呢?或者说如果编译器不完美呢?事实上都是静态类先下了一个规则(用static声明,除继承与专用构造函数外,只能声明静态成员),然后编译器才有这个role,发现你在静态类中声明实例化成员或调用时使用new,才报错。这里静态类的规则是specification(规范),而编译器对静态类的检查只是一个role(规则)。规范是不允许不需要你例化(其实是自动实例化,在装入程序后首次调用时,会执行其中专用的构造函数),而编译器规则只是检查你不要出现这样的错误而已。
这个规则是编译器的,但与IDE的规则又是两码事,一个是在你写代码时就会报错误,一个是编译时才会报错误。这么说吧,编译器其实是csc.exe文件,你可以找到的,而IDE就是开发时的那个窗口。如果你不使用IDE而是直接使用文本写代码,写完后直接使用csc.exe命令编译是一样的,只不过csc.exe的命令稍复杂了些,所以IDE在你点击编译时会自动调用csc.exe命令进行编译。
讲个笑话:为什么静态类不能实例化——因为IDE中写new时会报错误!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-08-31
.NET的静态类的作用:
1)创建扩展方法时需要static类;
2)如果成员方法不需要实例去调用,或者所有成员都是static的,则需要static类。
因为static类的所有成员都是静态的,也就是说不存在实例的成员,所以就不允许实例化,即实例化没有了任何意义。本回答被网友采纳
第2个回答  2017-08-31
静态类的意义是可以直接调用类中的静态方法,因为没有实例,所有的线程访问的是同一个静态类。
为什么不能实例化?因为没有必要实例化啊。实体类需要实例化,是因为每一个实例里面的字段,属性可能都不同,当你调用实体类实例的方法的时候,会把该实例传递给方法,也就是this。于是就能获得不同实例中的字段,属性的信息。
而静态类的字段,熟悉等都是一样的,所以就没有必要传递this了,也就没有必要实例化了。所以调用方法的时候直接ClassName.MethodName就行了
相似回答