2013-03-17 80 views
3

在阅读了C#progamming教程中的访问修饰符之后,我得出结论,定义一个方法public就足以让它从相同命名空间的另一个Form“看到”。public vs public static方法

但是,在实践中,无论何时我试图实现这一点,我还必须将方法定义为static,以便从相同命名空间的其他Forms引用该方法。

我失去了什么? 我在做什么错?

+0

的实例非静态公共方法是否创建该方法存在于类的实例?这个班级是否也被标记为静态的?发表一些代码 – DGibbs 2013-03-17 18:28:36

+0

[我应该何时使用public/private/static方法?](http://stackoverflow.com/questions/793494/when-should-i-use-public-private-static-methods) – 2016-07-31 14:37:40

回答

5

对于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). 
+0

“anObject.DoSomethingElse(); //也可以正常工作” - 你确定吗? Mono的编译器给出了一个硬错误“错误CS0176:静态成员不能通过实例引用进行访问,而是使用类型名称对其进行限定”,而且我似乎还记得在Microsoft编译器中看到了错误。 – hvd 2013-03-17 18:37:09

+0

其实,那个错误代码CS0176 [是微软的那个确切的错误代码](http://msdn.microsoft.com/en-us/library/zhcxt2bd%28v=vs.90%29.aspx)。 – hvd 2013-03-17 18:39:03

+0

@ hvd oopsie thx。 – bas 2013-03-17 18:57:53

1

public static方法不需要对象实例,它们可以在不创建类的任何实例中使用

ClassName.MyStaticPublicMethodName()

哪里因为public(非静态)方法需要一个类的实例,所以public(非静态)方法通常可以帮助您处理该对象的数据成员(字段)。

要使用你需要创建一个类

ClassName obj = new ClassName(); 
obj.MyPublicMethod(); 
相关问题