2

私は Java を勉強していますが、最近 C# も勉強し始めました。Java では、クラスの一部のメンバーの set メソッドを検証チェック付きで記述するように言われました。次に、コンストラクターで set メソッドを呼び出し、コンストラクターを使用してクラスのオブジェクトを初期化すると、データが検証されます。

したがって、C# には、Java の set/get メソッドと同じロジックである、いわゆるプロパティがあり、プロパティでデータを検証できます。

C# のコンストラクターで set メソッド/set プロパティを呼び出すにはどうすればよいので、検証コードを 2 回 (プロパティで 1 回、コンストラクターで 1 回) 記述する必要がありません。

コード: クラスの簡単な例

class Program
{
    private int someVariable;

    public Program(int someVariable)
    {
        this.someVariable = someVariable;
    }

    public int SomeVariable
    {
        get { return someVariable; }
        set
        {
            if (value > 5)
            {
                Console.WriteLine("Error");
            }
            else
            {
                someVariable = value;
            }
        }
    }
    static void Main(string[] args)
    {
        Program pr = new Program(10);
        pr.SomeVariable = 10;
    }
}
4

3 に答える 3

6

this.SomeVariableコンストラクターを呼び出してset、プロパティの一部を実行し、値を検証します。現在、変someVariable数値を直接設定することでこれをバイパスしています (「バッキング フィールド」と呼ばれることもあります)。

通常 C# では、次のようにコードを読みやすくするために、バッキング フィールドとプロパティを隣り合わせにします。

int _someVariable;
public int SomeVariable
{
    get { return _someVariable; }
    set { /* ... */ }
}
于 2013-02-01T00:39:06.340 に答える
5

コンストラクターからプロパティにアクセスできます。

public Program(int someVariable)
{
    SomeVariable = someVariable;
}

注: おそらく、setter でコンソールに直接書き込むべきではありません。それを行うためのより良い方法は、例外をスローすることです。そうすれば、プログラムの残りの部分がそれに対して何かを行うことができます。または、渡された値が範囲外の場合は、デフォルト値を設定することもできます。

public int SomeVariable
{
    get { return someVariable; }
    set
    {
        if(value > 5)
            throw new InvalidOperationException("SomeVariable cannot be greater than 5.");
        someVariable = value;
    }
}

または、

public int SomeVariable
{
    get { return someVariable; }
    set
    {
        someVariable = value > 5 ? 5 : value;
    }
}
于 2013-02-01T00:39:42.693 に答える
2

早くやれよ。

public Program(int someVariable)
{
    SomeVariable = someVariable;
}
于 2013-02-01T00:40:25.023 に答える