2012-05-20 29 views
2

我想在Unity中做一些遊戲編程,並且由於這個事實我不得不選擇C#或Javascript或(Boo)。我選擇C#是因爲至少有體面的IDE,實際上它比Javascript和麪向對象的要快。無論如何,我宣佈委託:爲什麼我必須給它一個名字?

private delegate Object Instantiate_(Object ,Vector3 ,Quaternion); 

,我收到編譯器錯誤,告訴我,我應該說出那些PARAMS。任何合乎邏輯的原因?我沒有在任何地方使用它們,也沒有提到它們,那麼命名它們有什麼意義呢?

+0

如果你不使用它們,爲什麼要把它們放在第一位呢?爲什麼不只是'私人委託對象實例化_()'? – jayjyli

+0

,因爲這是定義委託的語法 –

+0

我不知道您是否是C#的新手,或者您有使用委託的特例,但是當我看到一個委託時,我通常會認爲作者的真正含義是使用'event'。 –

回答

2

參數名稱是必需的,這樣你可以使用顯式指定參數名稱調用語法:

public delegate object MakePersonDelegate(string firstName, string lastName, DateTime dateOfBirth); 

MakePersonDelegate myDelegate = ...; 
myDelegate(lastName: "Smith", firstName: "John", dateOfBirth: new DateTime(1985, 1, 1)); 

注意:此代碼是如何切換第一和周圍的姓氏;代表得到他們在正確的順序,但:"John"將被傳遞給委託的第一個正式參數,並且"Smith"將傳遞給第二個參數。

+0

似乎有點傻,如果有什麼我應該得到警告沒有錯誤。爲什麼錯誤?愚蠢的規則。爲什麼我想在調用過程中交換參數?爲了讓我的代碼更容易混淆下一個開發者?我不是說聽起來很負面(我有C++背景),但是那幾個星期我熟悉C#並且比較C++我發現所有關於C#的可讀性和可維護性都只是一箇舊的故事。 – smallB

+3

@smallB在分配毛毯譴責之前可能學習C#的基礎知識? – McGarnagle

+0

@smallB由於C#支持這種語法,它需要在聲明或調用命名參數時出錯。您可能希望在調用期間*名稱*參數,因爲它們中的幾個可能具有相同的類型。你怎麼知道這兩個字符串中哪一個是第一個名字,哪一個是最後一個?具有五個相同類型的參數的函數如何?它非常快速地混淆,語言爲您提供了緩解它的手段;交換能力成爲額外的獎勵 - 你不必*做到這一點,但很高興知道你可以做到。 – dasblinkenlight

相關問題