本文将围绕c#静态方法和实例方法讨论一下。同时讨论下何时用静态方法,何时用实例方法。
静态方法方法是属于类的方法,实例方法是属于由类的对象的方法。
见如下代码:这三种形式我们应该都用过。
public class SomeClass
{
private string mafield=null;
public static instance =new SomeClass ();
public instanceMethod() {};
public static staticMethod(){};
}
public class AnotherClass
{
public static Main()
{
//第一种方式:声明实例,调用实例方法
SomeClass someClass=new SomeClass();
someClass.instanceMethod();
//第二种方式,通过一个静态的实例,去调用实例方法
someClass.instance.instanceMethod();
//第三种方式,直接调用静态方法
someClass .staticMethod();
}
}
先说实例方法,当你给一个类写一个方法,如果该方法需要访问某个实例的成员变量时,那么就将该方法定义成实例方法。一类的实例通常有一些成员变量,其中含有该实例的状态信息。而该方法需要改变这些状态。那么该方法需要声明成实例方法。
静态方法正好相反,它不需要访问某个实例的成员变量,它不需要去改变某个实例的状态。我们把该方法定义成静态方法。
第一种方式, 声明实例,调用实例方法
当一个类有多个实例,例如学生这个类,实例可以有学生甲,学生乙,学生丙,等等,我们就用第一种方式。在多线程的情况下,只要每个线程都创建自己的实例,那么第一种方法通常是线程安全的。
第二种方式,通过一个静态的实例,去调用实例方法
这种情况比较特殊,通常是整个程序里该类唯一的一个实例,我们通过调用该实例的实例方法来改变该实例的某些状态。这一个实例在多线程的情况下,通常是线程不安全的。除非我们给这个实例加锁。防止其他线程访问该实例。
第三种方式,直接调用静态方法
这种情况下静态方法不需要去改变某个实例的状态。只要得到少量的参数就可完成既定事情。比如判断一个文件是否存在,只要给个文件路径和文件名,就能知道该文件是否存在。