在阅读了C#progamming教程中的访问修饰符之后,我得出结论,定义一个方法public
就足以让它从相同命名空间的另一个Form
“看到”。public vs public static方法
但是,在实践中,无论何时我试图实现这一点,我还必须将方法定义为static
,以便从相同命名空间的其他Forms
引用该方法。
我失去了什么? 我在做什么错?
在阅读了C#progamming教程中的访问修饰符之后,我得出结论,定义一个方法public
就足以让它从相同命名空间的另一个Form
“看到”。public vs public static方法
但是,在实践中,无论何时我试图实现这一点,我还必须将方法定义为static
,以便从相同命名空间的其他Forms
引用该方法。
我失去了什么? 我在做什么错?
对于public static
方法,您不需要对对象的引用。该方法是静态的,可以在class
级别上访问。
如果你不能访问公共方法,那么你需要一个对象的引用,那么你可以。
public class AClass
{
public void DoSomething() {}
public static void DoSomethingElse() {}
}
可以按如下方式使用它们:
AClass.DoSomethingElse(); // no object reference required
AClass.DoSomething(); // will give compiler error, since you have no object reference.
var anObject = new AClass();
anObject.DoSomething(); // will work fine.
anObject.DoSomethingElse(); // compile error (thx hvd).
“anObject.DoSomethingElse(); //也可以正常工作” - 你确定吗? Mono的编译器给出了一个硬错误“错误CS0176:静态成员不能通过实例引用进行访问,而是使用类型名称对其进行限定”,而且我似乎还记得在Microsoft编译器中看到了错误。 – hvd 2013-03-17 18:37:09
其实,那个错误代码CS0176 [是微软的那个确切的错误代码](http://msdn.microsoft.com/en-us/library/zhcxt2bd%28v=vs.90%29.aspx)。 – hvd 2013-03-17 18:39:03
@ hvd oopsie thx。 – bas 2013-03-17 18:57:53
public static
方法不需要对象实例,它们可以在不创建类的任何实例中使用
ClassName.MyStaticPublicMethodName()
哪里因为public
(非静态)方法需要一个类的实例,所以public(非静态)方法通常可以帮助您处理该对象的数据成员(字段)。
要使用你需要创建一个类
ClassName obj = new ClassName();
obj.MyPublicMethod();
的实例非静态公共方法是否创建该方法存在于类的实例?这个班级是否也被标记为静态的?发表一些代码 – DGibbs 2013-03-17 18:28:36
[我应该何时使用public/private/static方法?](http://stackoverflow.com/questions/793494/when-should-i-use-public-private-static-methods) – 2016-07-31 14:37:40