DefaultMemberAttribute - 它做什么?

dev*_*ium 9 .net c# vb.net attributes

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

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

    public static void Main() {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

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


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

Jef*_*tes 10

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

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

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

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


jos*_*ers 6

我个人从来没有使用它,但据我所知,你正在定义调用InvokeMember时要调用的默认方法.所以,如果我要说的话,请使用您提供的代码段:

Program prog = new Program();
typeof(Program).InvokeMember("", null, null, prog, null);
Run Code Online (Sandbox Code Playgroud)

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