2009-07-13 121 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#通过为您发布属性(如果存在索引器)给所有其他用例的异常,为索引器提供了特殊行为。

相关问题