繁体   English   中英

DefaultMemberAttribute - 它做什么?

[英]DefaultMemberAttribute - what does it do?

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM