static

1.类不加修饰符,默认是internal
方法或者构造函数不加修饰符,默认是provate
2.扩展方法必须写在static 类里面

我们可以使用诸如private、public等修饰符来控制字段或方法的可访问性;是否使用static关键字来修饰字段或方法则决定了字段或方法是对类有意义还是对类的实例有意义。所谓“对类有意义”或“对实例有意义”都是语义范畴的概念。比如对于Human这个类来说,Weight(重量)这个字段对于人类的个体是有意义的,而对于“人类”这个概念并没有什么意义;Amount(总量)这个字段就不一样了,它对于人类的个体没有意义,但对于人类是有意义的。方法也有类似的情况,比如Speak这个方法,只有人类的个体才能Speak,而Populate(繁衍)这个方法似乎对于人类比对于人类的个体更有意义。为了让程序满足语义要求,C#语言规定:对类有意义的字段和方法使用static关键字修饰、称为静态成员,通过类名加访问操作符(即“.”操作符)可以访问它们;对类的实例有意义的字段和方法不加static关键字,称为非静态成员或实例成员。从语义方面来看,静态成员与非静态成员有着很好的对称性,但从程序在内存中的结构来看,这种对称就被打破了。静态字段在内存中只有一个拷贝,非静态字段则是每个实例拥有一个拷贝,无论方法是否为静态的,在内存中只会有一份拷贝,区别只是你能通过类名来访问存放指令的内存还是通过实例名来访问存放指令的内存。--参考《深入浅出WPF》

原文地址:https://www.cnblogs.com/wangzhe66369/p/14211151.html