为什么可以将名称与其返回类型相同的属性?

4 c#

在C#中,为什么可以这样做

public Int32 Int32 { get; set; }
Run Code Online (Sandbox Code Playgroud)

但不是这个

public int int { get; set; }
Run Code Online (Sandbox Code Playgroud)

在我的问题中我应该更干净,是否有任何理由为什么属性的返回类型可以与属性具有相同的名称?

Mic*_*tta 9

变量的名称可能与C#中的语言关键字不同. int是一个关键字; Int32是一种类型.

请注意,类型和属性名称实际上并不相同; 他们完全合格的名字是不同的.一个是System.Int32,另一个是YourClass.Int32.

如果你真的想要将你的属性命名为"int"(不要这样做),你可以使用verbatim运算符:

public int @int { get; set; }
Run Code Online (Sandbox Code Playgroud)

来自MSDN:

前缀"@"允许使用关键字作为标识符,这在与其他编程语言交互时很有用.字符@实际上不是标识符的一部分,因此标识符可能在其他语言中看作普通标识符,没有前缀.带有@前缀的标识符称为逐字标识符.允许使用@前缀作为非关键字的标识符,但强烈建议不要使用样式.


Eri*_*ert 8

有没有理由为什么属性的返回类型可以与属性具有相同的名称?

您正在设计一种编程语言.这应该合法吗?

enum Color
{
  Red,
  Blue,
  Mauve
}

class Rectangle
{
    ...
    public Color Color { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

你有两个选择.(1)使其成为非法.要求执行此操作的任何人为类型和属性提供不同的名称.也许您会关心提供一些关于类型或属性的名称不是"颜色"的建议.(2)使其合法化.

我们没有兴趣将选项(1)的负担强加给您.

允许属性及其类型具有相同的名称会在名称解析中引入一些有趣的歧义,我们将其称为"颜色问题".有关这方面的一些想法,请参阅我关于它的一个方面的文章:

http://blogs.msdn.com/ericlippert/archive/2009/07/06/color-color.aspx

或者,阅读关于颜色问题的C#规范部分; 有一个有趣的解释为什么查找规则是这样的.


Jim*_*amb 7

"int"是C#中的保留字.Int32是声明的类型.您可以拥有一个名为Int32的成员,因为该成员的范围限定在您的类中,而Int32声明的类型具有不同的范围.