1

現時点では .Net 3.0 を使用していますが、 Automatic Properties の使用方法がわかりません。

たとえば、Authomatic Properties を介してこのサンプル コードを記述したい場合、どうすればよいですか?

private string _name = string.Empty;
private string _family = string.Empty;
//A field with default value
private DateTime _releaseDate = System.DateTime.Now;


//ReadOnly Property
public string Name
{
    get {return _name; }
}

//enforce validation rules on setting 
public string Family
{
    get { _family; }
    set
    {
        if (value.Length < 3)
            return new Exception("Family need at least 3 character long");
        else
            _family = value;
    }
}

// A property from two other fields
public string FullName
{
    get { return _name + " " + _family; }
}

回答ありがとうございました。回答を得ました。

4

4 に答える 4

6

できません。

自動プロパティは、単純にプライベート バッキング フィールドを作成し、それを隠します。プロパティにロジックが必要な場合は、自分で実装する必要があります。

自動プロパティでは、ゲッターとセッターの両方が必要ですが、セッターを非公開にすることができます。

public string Foo { get; private set; }

ところで、文字列プロパティから例外を返すことはできません。例外は返されるべきではなく、スローされるべきです。

public string Family
{
    get { _family; }
    set
    {
        if (value.Length < 3)
            return new Exception("Family need at least 3 character long");
        else
            _family = value;
    }
}

これはおそらく次のようになります。

public string Family
{
    get { _family; }
    set
    {
        if (value.Length < 3)
            throw new Exception("Family need at least 3 character long");
        else
            _family = value;
    }
}
于 2010-01-15T09:01:04.080 に答える
3

.NET 3.0 を使用しているとのことですが、VS2005 を使用していますか? その場合、自動的に実装されたプロパティをサポートしていない C# 2 を使用しています。

VS2008 を使用していて .NET 3.0 をターゲットにしている場合、それらは正常に動作するはずですが、この場合、どのプロパティも「自明な」プロパティではないため、実際には適用できません。自動的に実装されるプロパティはコンパクトな書き方です:

private string foo;
public string Foo { get { return foo; } set { foo = value; } }

プロパティがそのパターン (プロパティのモジュロ アクセス修飾子) に従っていない場合、自動プロパティは役に立ちません。

于 2010-01-15T09:01:51.287 に答える
3

できません。自動プロパティは読み取り専用にすることはできず、本文にロジックを含めることはできません。

自動プロパティはこれの短い形式です

private string _name;
public string Name
{
   get{return _name;}
   set{_name = value;}
}

これに

public string Name{get;set;}
于 2010-01-15T09:02:43.217 に答える
2

自動プロパティは、単にプロパティにバッキング フィールドを「繰り返し」させたい場合に使用されます。

すなわち

string _name;
public string Name { get { return _name; } set { _name = value; } }

のように単純に書き換えることができます。

public string Name { get; set; }

コンパイラは、ランダムに名前が付けられた非公開のバッキング フィールドを展開し、最初のコード サンプルと同等のコードを書き込みます。

ただし、デフォルト値などの特別なことをしたい場合や、 setvalueを検証したい場合は、それらを使用できません。

実際、可能な例外はデフォルトの初期化です。

コンストラクターを使用して、プロパティをデフォルトで初期化できます。

于 2010-01-15T09:02:03.000 に答える