Viv*_*sse 52 c# language-design
在C#中,以下代码无法编译:
class Foo {
public string Foo;
}
Run Code Online (Sandbox Code Playgroud)
问题是:为什么?
更确切地说,我明白这不会编译,因为(我引用):
成员名称不能与其封闭类型相同
好的.我明白,我保证,我不会再这样做了.
但我真的不明白为什么编译器拒绝接受任何与封闭类型同名的字段.阻止我这样做的根本问题是什么?
Dan*_*ant 50
严格来说,这是C#强加的限制,最有可能是为了方便语法.构造函数有一个方法体,但它在IL中的成员条目表示为".ctor",它的元数据与普通方法略有不同(在Reflection类中,ConstructorInfo派生自MethodBase,而不是MethodInfo.)我不相信有一个.NET限制,阻止创建一个与外部类型同名的成员(甚至一个方法),虽然我还没有尝试过.
我很好奇,所以我确认它不是.NET的限制.在VB中创建以下类:
Public Class Class1
Public Sub Class1()
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
在C#中,您将其引用为:
var class1 = new Class1();
class1.Class1();
Run Code Online (Sandbox Code Playgroud)
Jam*_*unt 19
因为Foo被保留为构造函数的名称.
因此,如果您的代码被允许 - 您会将其称为构造函数?
即使可以通过将构造函数视为特殊情况并将新规则引入方法/成员绑定来实现这一点 - 这是一个好主意吗?在某些方面它将不可避免地导致混乱.