1

プログラムでプロパティをオーバーライドしようとしています。これが基本的に私がやろうとしていることです:

class A { public int test = 7; }

class B : A { public int test = 8; }


class Program
{
    static void Main(string[] args)
    {
        A test1 = new A();
        A test2 = new B();

       Console.WriteLine(test1.test);
       Console.WriteLine(test2.test);

    }
}

2番目のケースで8を表示したい場合、これは両方のケースで7を表示します....

virtual と override と new を試しました (public new int test = 8;) しかし、うまくいかないようです

はい、プライベートとゲッターを使用する必要があることはわかっています。それが可能かどうか知りたいだけですか?

編集 :私はネイティブの C# プログラマーではないので、用語 (フィールドやプロパティなど) を混同しても許してください!

4

3 に答える 3

3

プログラムでプロパティをオーバーライドしようとしています。

class A { public int test = 7; }

問題は、それがプロパティint testではなく、パブリックフィールドであることです。フィールドはオーバーライドできません。

プロパティをオーバーライドする例を次に示します。

class A {
    public virtual int test {
        get {return 7;}
    }
}

class B : A {
    public override int test {
        get {return 8;}
    }
}

これはideoneでのこのコードのデモです

于 2013-02-03T17:24:31.480 に答える
1

testプロパティではなくフィールドです。これをプロパティに変更し、修飾子を追加してvirtual、サブクラスでオーバーライドできるようにする必要があります。override次に、キーワードを使用して、 class で返される値をオーバーライドする必要がありBます。

class A
{
    public virtual int test
    {
        get { return 7; }
    }
}

class B : A 
{
    public override int test
    {
        get { return 8; }
    }
}
于 2013-02-03T17:26:37.157 に答える
-1

これを変える

A test2 = new B();

これとともに

B test2 = new B();

test2 を A として作成する場合は、A メソッドを呼び出します

于 2013-02-03T17:25:46.207 に答える