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図を描画するいくつかのクラスに対して宣言する必要がある型の名前を変更します: FigureLine、など。それらをFigurePointなどと呼ぶことができます。または、タイプの名前を次のように変更できますShapeLineShapePointShape

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

しかし、今それを使おうとすると、FigureLine.LineShape二重は良くないということになります。

プロパティの名前を変更しています...どのように?

4

2 に答える 2

3

質問 1: なぜエラーになるのですか?

B同じクラス内で両方とも呼び出された 2 つのメンバーがあります。(型もメンバーです。) メソッドのオーバーロードを除けば、それはできません。

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 に答える