此代码有效:
class Example
{
public Int32 Int32
{
get { return Int32.Parse("3"); }
}
}
Run Code Online (Sandbox Code Playgroud)
此代码无法编译:
class Example
{
public Int32? Int32
{
get { return Int32.Parse("3"); }
}
}
Run Code Online (Sandbox Code Playgroud)
CS1061'int?' 不包含'Parse'的定义,也没有扩展方法'Parse'接受'int?'类型的第一个参数 可以找到(你错过了使用指令或程序集引用吗?)
我的例子可能看起来很愚蠢,但是如果你使用想象一个枚举就更有意义了
public Choice? Choice { get { return Choice.One; } }
Run Code Online (Sandbox Code Playgroud)
在第二个示例中,Int32指的是Int32不要键入的属性System.Int32.由于属性Int32是类型System.Nullable(System.Int32),因此它没有解析方法.
你必须写,
public Int32? Int32
{
get { return System.Int32.Parse("3"); }
}
Run Code Online (Sandbox Code Playgroud)
将属性类型名称与属性名称相同是特殊情况,包括规范:
7.6.4.1相同的简单名称和类型名称
.在以下形式的成员访问E.I,如果E是单个标识符,并且如果的含义E为简单名称(第7.6.2节)是一个常数,字段,属性,局部变量或具有相同类型的含义参数E作为类型名称(§3.8),那么两个可能的含义E是允许的.两种可能的含义E.I从不含糊,因为在两种情况下都I必须是该类型的成员E.换句话说,该规则只允许访问静态成员和嵌套类型,E否则将发生编译时错误.
因此,在您的第一个片段中,简单名称Int32允许引用属性Int32以及键入Int32.
在第二个代码段中,未应用该规则,简单名称Int32仅指属性.
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |