0

命名属性和类型存在问题。例子:

public class A
{
    public class B { ... }
    public B B; // << error
}

问题1:为什么会出错?

我可以这样解决

public class A
{
    public B B;
}
public class B { ... } // move it outside

或者像这样

public class A
{
    public class B { ... }
    public B BB; // rename property
}

甚至

public class A
{
    public class BB { ... } // rename type
    public BB B;
}

问题2:你会怎么做?


将类型声明移到外面是有风险的,因为可能有几个类在语义上需要相同的类型名称 -> 冲突 -> 某些类类型的奇怪名称或必须将类放在命名空间中。

重命名它..棘手。例如,重命名Shape类型,必须为几个绘制图形的类声明:FigureLineFigurePoint等。我可以称它们为ShapeLineShapePoint等等。或者我可以将类型重命名Shape

public class FigureLine
{
    public enum LineShape {Straight, Bend, Whatever};
    public LineShape Shape {get; private set;}
}

但是现在如果我尝试使用它,那么它就变成FigureLine.LineShape了——双线并不好。

重命名属性...如何?

4

2 回答 2

3

问题1:为什么会出错?

你有两个成员都B在同一个类中调用。(类型也是成员。)除了方法重载之外,您不能这样做。

从 C# 规范的第 10.3 节:

  • 常量、字段、属性、事件或类型的名称必须不同于在同一类中声明的所有其他成员的名称。

下一个:

问题2:你会怎么做?

如果您希望该课程公开,我可能会将其设为顶级课程。

于 2013-10-29T10:23:30.453 回答
2

1 - 通过将其移到外面来解决它。我建议遵循所有非私有类型都应该在它们自己的源文件中的原则。

2 - 我不太清楚这里的问题是什么,即使将枚举移动到它自己的文件中,我也会坚持使用你的名字:

public enum LineShape {Straight, Bend, Whatever};

public class FigureLine
{
    public LineShape Shape {get; private set;}
}

LineShape是一个更好的名称,而不仅仅是Shape因为它更好地描述了枚举的用途(定义线条样式,而不是例如 2D 或 3D 形状)。

于 2013-10-29T10:43:36.357 回答