在閱讀了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