1:静态方法不可访问类成员非静态成员。
2:在类中静态变量在载入的是分配一个内存空间,所有的变量类共享一个内容,如果任何一个对象修改了静态变量的值,所有变量输出的值都会改变:例如代码:
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Person p = new Person("胡明豪");
label1.Text=p.GetName();
Person p1 = new Person("胡明豪2");
label2.Text = p1.GetName();//显示为胡明豪2
label3.Text = p.GetName();//胡明豪2
}
}
}
3. 静态方法并不存在常驻内存,性能高等特点。方法跟属性不一样,方法在调用时都需要从代码区域获取一份本方法的代码去执行,在这一点上静态和非静态方法没有本质区别。在AppDomain加载程序集时,代码被放到特定的只读区域,不存在静态非静态之分。
4. 静态方法不能访问实例的方法,属性等,但实例方法则无此限制。同时需注意在多线程编程中,任何方法(包括静态和非静态)对本方法外定义的属性,变量等的访问和修改需谨慎,因为这可能导致线程安全问题。
5. 静态方法不能被继承,重写,因为static修饰符不能跟virtual, abstract, override等共存,因此在一些面向对象的设计中要谨慎使用,它在一定程度上的确会破坏面向对象设计OO特性,诸如继承,多态等。 但对于一些功能相对独立,不需要跟其它对象有很多调用,又不需要经常修改的方法,可以使用静态方法,静态方法在调用时相对简单明了。
6:在不需要更改类成员变量是使用静态方法。
7:一直以为静态方法在多用户并发下会是排队等待,一个个执行,原来是并发执行的,绝对不会排队等待。