如果需要把ChangeText()改为静态方法,
那么,静态方法有没有办法访问实例成员呢?比如上面的方法,用静态方法访问实例的Lable?
答案是肯定的。
不能使用静态方法访问实例成员的原因是因为不知道实例成员的内存地址,如果知道了,就可以访问了。
如:
调用MyChange方法,传递给它窗体的引用,就可以达到目的。
记得Csdn有人问过一个问题,建立一个子类,在主类中声明这个类为static,如 private static Someclass someclass=new SomeClass();
然后使用SomeClass的内置的方法更改主类中的StatusBar.Text,用上面的方法应该可以。
主类中:
如果把StatusBar.Text的值指向一个静态String,
public static string sText=null;
bar.Text=sText;
通过更新sText的值也可以更改bar.Text,不过需要时时刷新bar.Text=sText才可以,不如上面的办法好。
关于这种方法的使用价值,可以用在以下情况:
用Vs建立了一个Form,Form中有一个ListBox,用来显示信息,对于主类,可以建立以下方法:
throw new Exception(something);
比较合适。
如果是在Form项目中建立,把错误信息显示在ListBox中,是不是更加人性化点;要在非Form1类中显示错误信息到ListBox中,可以把用属性把ListBox的引用传递过来,然后建立ShowMessage(),这样可行,只是相同的ShowMessage()要建立2次,不符合编程的原则,不要使用重复代码,那么可以在Form1 中建立静态方法:
仁者见仁,智者见智,请大家发表意见。