DefaultMemberAttribute - 它做什么?

时间:2009-07-13 14:35:35

标签: c# .net vb.net attributes

我已经阅读过有关它的MSDN文章。在内部看来,它是c#设置的方式,它将作为索引器工作(我是对的吗?)。现在,我已经看到了以下示例:

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

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

现在,我不明白这意味着什么。


谢谢大家。但除了索引器之外,我仍然无法获得它的用处。我们什么时候打电话给InvokeMember?

3 个答案:

答案 0 :(得分:10)

不,如果没有从对象引用成员,即DefaultMemberAttribute调用的成员,则VB.NET等语言使用InvokeMember来查找默认操作的成员。 。正如您所指出的,这通常与索引器一起使用,但C#不直接使用它(除非您明确使用InvokeMember。)

但是,为了其他.NET语言的优势,C#会为类的索引器(如果有的话)发出DefaultMemberAttribute,如MSDN所示:

  

C#编译器发出   任何类型的DefaultMemberAttribute   包含索引器。在C#中它是一个   手动归属类型的错误   如果是,则使用DefaultMemberAttribute   type也声明了一个索引器。

我认为MSDN通过在评论中引用索引器来混淆事物,但随后给出了一个不使用索引器的示例。为了澄清,默认成员可以是任何东西,但C#通过向您发送属性(如果存在索引器)为所有其他用例例外,为索引器提供特殊行为。

答案 1 :(得分:6)

我个人从未使用它,但据我所知,您正在定义调用InvokeMember时要调用的默认方法。因此,如果我要说的话,请使用您提供的代码段:

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

因为我将第一个参数留空了InvokeMember调用,所以它将使用该属性来确定您的类的默认成员,在您的情况下它是Main。

答案 2 :(得分:1)

DefaultMemberAttribute属性定义了在调用InvokeMember时使用空字符串作为第一个参数调用的默认成员。

如果您阅读InvokeMember的MSDN文档,则会明确说明:

  

参数
  命名
  类型:System.String
  String,包含要调用的构造函数,方法,属性或字段成员的名称    - 或 -
  用于调用默认成员的空字符串(“”)。

默认成员将是DefaultMemberAttribute属性声明的成员。