[英]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.