2011-04-08 53 views

回答

1

好了,所以我覺得會發生什麼情況是這樣的:

聲明一個代表真正應該問的編譯器創建一個新的類特殊的爲您服務。這個類的工作是作爲一個函數指針(如果需要的話可以是多個函數指針)。

編譯器將通過創建一個新類來完成這個任務,因爲您需要使用委託完成所有工作。它會繼續創建這個類,但是你得到的所有東西都是實例級別的方法和屬性等。

所以聲明一個委託爲靜態是無意義的(正如JaredPar和其他人指出的那樣)。你說'給我一個靜態類,其中所有的膽量都不是靜態的(因此無法達到)等等。「這是沒有意義的。

4

聲明delegate是聲明一個類型。 C#中的代表無法制作成static。如果你想聲明一個類型委託的變量,你會這樣做:

public delegate void SomeCoolDelegate(); // declare a type called SomeCoolDelegate 
public static SomeCoolDelegate foo; // declare foo as an object of type SomeCoolDelegate 
+1

這是不正確的。您可以聲明靜態類,實際上,這是制定擴展方法的一個要求。 – Tejs 2011-04-08 19:48:15

+0

Gabe:謝謝,我知道,但它沒有點擊出於某種原因,我現在覺得很蠢LOL我很欣賞澄清/提醒 – richard 2011-04-08 19:49:01

6

這對委託沒有意義;我的意思是,從語義上講,就像說我永遠不想實現這個方法簽名!

你可以聲明一個實現爲靜態...

protected static SomeCoolDelegate SomeMethod { get; set; } 

當你標記一個類爲靜態的,你說你永遠不希望它被實例化。委託只是一種識別方法簽名的方法。

+1

我不明白你可以把類標記爲靜態,以表示我從不想要這個類的實現。將代表標記爲靜態,以表示「我總是希望此代表的每個實例都是靜態的」? – richard 2011-04-08 20:03:54

+0

一個有趣的問題;但是,方法符號ature不是由它的靜態定義的;只有輸入變量,泛型聲明和輸出類型。我不認爲有一種方法說「僅限靜態方法」。 – Tejs 2011-04-08 21:38:44

2

聲明委託正在聲明一個類型。因爲只包含實例方法的類型被聲明爲靜態,所以它非常少。

0

委託是一種類型,在運行時透視類型只是數據存儲的分類,就像包含成員的文件夾一樣,沒有必要將類型設爲靜態,因爲類型仍然是靜態的。任何類型的成員都可以是靜態的。

C#讓我們在類上編寫靜態代碼,以限制開發人員只在類型中寫入靜態成員,但這並不意味着該類型是或不是靜態的。

相關問題