您的位置:首页 > 编程语言 > C#

static 类深入了解

2016-07-26 11:40 656 查看
     
http://www.cnblogs.com/wlb/archive/2009/12/18/1627426.html
Static 是静态的, 故名思义, 就是一个类所固有的,而不是其它类所固有的。 更不是对象的拥有的。

所以:Static 方法不用实例化,不能被继承,不能设置为 virtual ,abstract , 更不可能被 override ,也可以说, static 不是那么灵活。

而 非 static 就很灵活。 对象化特征明显, 你可以用 parent.method 调用,也可以用 child.method 调用。 而对于调用者来说, 是调用了适当的方法,其实不是相同的方法 。这很好理解。

static 还可能会引起多线程的并发问题,用 lock 解决。

当然,基于类固有的特点, 也有static 存在的道理。如:我只用 dbhelper.ExecuteQuery 来执行查询, 而它不能被覆写,不能用子类来访问 。
静态分配的,有两种情况:1. 用在类里的属性、方法前面,这样的静态属性与方法不需要创建实例就能访问,通过类名或对象名都能访问它,静态属性、方法只有“一份”:即如果一个类新建有N个对象,这N 个对象只有同一个静态属性与方法;2.  方法内部的静态变量:方法内部的静态变量,执行完静态变量值不消失,再次执行此对象的方法时,值仍存在,它不是在栈中分配的,是在静态区分析的, 这是与局部变量最大的区别;
————————————————————————
这是我的C++笔记,看能不能用。static用法:1、修饰函数的局部变量:特点:有默认值0,只执行一次,运行一开始就开辟了内存,内存放在全局2、修饰全局函数和全局变量:特点:只能在本源文件使用3、修饰类里面的成员变量:特点:和1差不多,定义多个static y,但只有一个y,不进入类的大小计算,不依赖于类对象的存在而存在(可直接调用,要进行外置声明)4、修饰类的成员函数:特点:f():括号里无this指针,只能调用他的本类静态函数和他的静态变量,即是用static修饰过的不依赖于类对象的存在而存在(可不进行外置声明,直接调用
我是个菜鸟, 按我个人理解c#中static关键字应用分为两部分--静态类,静态成员.静态类:静态类不能实例化(不允许有实例构造器),只能包含静态成员,密封的.静态类没有确定的实例化时间,MSDN上讲可以保证在程序中首次引用该类前构造它(调用静态构造器).CLR还提供了适当关键字来改变静态类构造时机.静态类一但构造将惯穿"全局"(程序的整个生存期).静态成员:静态成员归所属类型所有,而不是实例,但任一实例都可共享它.因为它归类型所有,由此它不能访问实例成员.并且访问它只能通过类型名而非实例变量名.和静态类类似的是它也一但构造(指字段成员)将惯穿"全局"(程序的整个生存期).使用:我没有"static惊恐症",相反有些时候我倒觉得基于static的特点它会提高性能.呵, 这么说也很片面(BS一下自己).其实我觉得还是要看具体应用了.就像某某牛人说的"枪在罪犯手里用来犯罪,但在士兵手里确是保卫国家"--好像是这么说的.. 恩恩,记不清了..以上仅个人观点,错误之处还望指正..

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c#