我已经阅读过有关它的MSDN文章。在内部看来,它是c#设置的方式,它将作为索引器工作(我是对的吗?)。现在,我已经看到了以下示例:
[DefaultMemberAttribute("Main")]
public class Program {
public static void Main() {
...
}
}
现在,我不明白这意味着什么。
谢谢大家。但除了索引器之外,我仍然无法获得它的用处。我们什么时候打电话给InvokeMember?
答案 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属性声明的成员。