2013-03-17 78 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(); 
相關問題