5

最近C#の勉強を始めました。プロパティについて学んだばかりで、それらをより理解するために簡単なプログラムを作成することにしました。これは私が書いたコードです:

  class Dog
{
    private int weight;
    private string colour;
    public string colour { get; set; }
    public Dog(int theWeight, string theColour)
    {
        weight = theWeight;
        colour = theColour;
    }
}

そして、あいまいなエラーが発生します。私が理解している限り、これは起こるべきではありません。

4

5 に答える 5

11

同じ名前のフィールドとプロパティがありますcolour。そのため、コンパイラはエラーを生成します。

于 2010-08-03T07:41:19.547 に答える
6

あいまいなエラーは、フィールドとプロパティに同じ名前の「色」という名前を付けたことです。プロパティ定義 fe を変更します

public string Colour
{
 get { return colour;}
 set { colour = value;}
}
于 2010-08-03T07:42:28.900 に答える
5

フィールドとプロパティの両方を同じ名前にすることはできません。

2 つのcolour識別子のいずれかの名前を変更する必要があります。

于 2010-08-03T07:41:59.200 に答える
4

ラインで

colour = theColour;

コンパイラはあなたが何を意味するのかわかりません。それはどちらかである可能性があります

private string colour;

またはそれは可能性があります

public string colour { get; set }

別の命名規則を選択すると、あいまいさを解消できます。たとえば、プロパティの最初の文字を大文字にし、フィールドをアンダースコアと小文字で始めるように選択できます。その場合、クラスは次のようになります。

class Dog
{
   private int _weight;
   private string _colour;
   public string Colour { get; set; }
   public Dog(int theWeight, string theColour)
   {
      _weight = theWeight;
      _colour = theColour;
   }
}

ただし、とにかくここに重複がある可能性があることに注意してください。そもそも、自動プロパティ Color とフィールド _colour の両方を用意するつもりはなかった可能性があります。

推奨されるガイドラインに従うのに役立つツールを選択することもできます。例として、 FxCopを見てください。正しいか間違っているかということはありませんが、一般的に受け入れられているルールを使用する方が確かに簡単です。(確かに、フィールドにアンダースコアを使用するという私の提案は、一般的に受け入れられているものと一致していません。ただし、パブリック フィールドは使用しません。)

于 2010-08-03T07:52:14.493 に答える
1

あなたの例では、C# 3.0 以降を使用している場合、これらのプライベート フィールドは実際には必要なく、自動実装されたプロパティを使用できることに注意してください。

詳細はこちら... http://msdn.microsoft.com/en-us/library/bb384054.aspx

プログラマーとコンパイラーのどちらかによる混乱の問題を回避し、読みやすさを向上させます。

于 2010-08-03T09:09:22.283 に答える