在.NET
属性中应该是一等公民,但是在IL
代码中,属性 getter 和 setter 被实现为get_
PropertyName和set_
PropertyName。
class Property
{
int Value { get { return 42; } }
int get_Value() { return 6 * 9; }
void set_Value(int i) { } // Error even though Value is a read only property
}
输出:
错误 CS0082:类型“SO.Property”已经保留了一个名为“get_Value”的具有相同参数类型的成员
错误 CS0082:类型“SO.Property”已经保留了一个名为“set_Value”的具有相同参数类型的成员
为什么设计者.NET
决定使用可能与用户代码冲突的名称?他们可能使用了非法字符(正如 Java$
用于内部类的东西)。