2009-07-13 68 views
8

我已經閱讀了關於它的MSDN文章。在內部看來,它是c#設置的方式,這是將作爲索引器工作的函數(我是對嗎?)。現在,我看到下面的例子:DefaultMemberAttribute - 它有什麼作用?

[DefaultMemberAttribute("Main")] 
public class Program { 

    public static void Main() { 
     ... 
    } 
} 

現在,我不明白它的意思。


謝謝大家。但除了索引器之外,我仍然無法獲得它的實用性。我們什麼時候打電話給InvokeMember?

+0

http://stackoverflow.com/a/294405/21239 – 2013-09-13 05:20:56

回答

5

我個人從未使用過它,但據我所知,當調用InvokeMember時,可以定義要調用的默認方法。因此,使用代碼片段,你提供的,如果我是在說:因爲我離開了第一個參數空InvokeMember的調用它會使用該屬性來確定默認成員是類的東西,在

Program prog = new Program(); 
typeof(Program).InvokeMember("", null, null, prog, null); 

您它是主要的情況。

1

DefaultMemberAttribute屬性定義了在使用空字符串作爲第一個參數調用InvokeMember時調用的默認成員。

如果你讀了InvokeMember MSDN文檔,它明確地說:

參數

類型:System
含構造函數的名稱的字符串,方法,屬性或要調用的字段成員。
- 或 -
用於調用默認成員的空字符串(「」)。

默認成員將是由DefaultMemberAttribute屬性聲明的成員。

9

不,DefaultMemberAttribute被諸如VB.NET之類的語言用來找出如果沒有成員從一個對象(即由InvokeMember調用的成員)被引用的默認情況下起作用的成員。正如您所指出的那樣,這通常與索引器一起使用,但它不直接用於C#(除非明確使用InvokeMember)。

然而,對於其他.NET語言的權益,C#不發射DefaultMemberAttribute一類的分度器(如果有的話),由MSDN所示:

C#編譯發射 包含索引器的任何類型 的DefaultMemberAttribute。在C#中,如果 類型也聲明瞭索引器,則手動將類型 與DefaultMemberAttribute相關聯的錯誤是 。

我覺得MSDN通過在評論中引用很多索引器來混淆事物,但接着給出了一個不使用索引器的示例。爲了澄清,默認成員可以是任何東西,但C#通過爲您發佈屬性(如果存在索引器)給所有其他用例的異常,爲索引器提供了特殊行爲。

相關問題