2012-08-25 199 views
1

我有點困惑。爲什麼DllImport需要標識符?

在代碼:

[DllImport("library.dll")] 
public static extern void function(int x); 

爲什麼需要X?這不應該是足夠的,因爲這只是一個定義而不是一個聲明?

+0

中的期望值請記住,語言的問題不是「爲什麼我的功能缺失?」這是「[爲什麼不添加我的功能](http://blogs.msdn.com/b/ericlippert/archive/2009/06/22/why-doesn-tc-implement-top-level-methods.aspx) ?」這個特殊的功能需要對函數聲明解析器進行上下文敏感的更改。 (它必須知道它聲明瞭什麼類型的函數。)這會使語法複雜化,而獲得相對較少的好處。 –

+0

等一下,我很困惑。爲什麼不用x表示它不知道它聲明瞭什麼類型的函數? void函數(int)是一個函數,它接受一個int並不返回任何內容。 'x'加上了什麼?當然,它需要「函數」,因爲這是要導入的函數的名稱...... – cwm9

+0

這意味着'DllImport'聲明(參數名稱是可選的)必須與非'DllImport'聲明不同地進行解析(參數名稱是必需的)。這意味着函數聲明解析器需要知道它正在解析哪種類型的聲明,這使得這種方法顯得更加複雜,而且效果相對較小。 「我想添加此功能,以便編寫較少可讀代碼更容易。」 –

回答

3

它的C#語法,接口中的方法也是如此。

可能最大的原因是,它增加了代碼的清晰度。參數名稱可能會告訴方法

+0

因此,換句話說沒有理由? – cwm9

+1

那麼,就接口而言,名稱對於可選參數很有用,而且它們爲代碼增加了更多的清晰度。參數名稱可以指定函數中預期的值類型 – Habib

+2

實際上,「原因」是指方法的實現可以找到該參數;)* * *不明白的是C++爲什麼可以聲明原型參數*不需要名稱。如果你問我,那很沒用; – paulsm4