0

言語はC#です。
クラスAのメソッドをオーバーライドしたとしましょう

    class A:B
    {
        protected override void Method(BaseClass bc)
        {
            (DerivedClass)bc.DerivedClassField = blabla;
        }
    }

私が以下を書くことができるライブラリ/言語機能などはありますか?

    class A:B
    {
        protected override void Method(BaseClass bc)
        {
            bc.DerivedClassField = blabla;
        }
    }

たとえば、クラスAなどに属性を追加しますか?
くだらないフォーマットでごめんなさい。

4

2 に答える 2

1

ジェネリックスを使用して、タイプセーフな方法でこれを行うことができます。

class A<T> where T : BaseClass {
    protected virtual void Method(T bc) { ... }
}

class B : A<DerivedClass> {
    protected override void Method(DerivedClass bc) {
        bc.DerivedClassField = blabla;
    }
}

A<T>しかし、知らないうちに使用したい場合でも、これは他の問題を引き起こす可能性がありますT。その場合、キャストを使用するか(クラス構造がキャストが失敗しないことを意味する場合)、オブジェクトモデルを再定義します。

于 2011-12-19T13:17:19.323 に答える
0

それが正しいと確信している場合は、bcとしてキャストできます。DerivedClass

class A:B
{
    protected override void Method(BaseClass bc)
    {
        ((DerivedClass)bc).DerivedClassField = blabla;
    }
}
于 2011-12-19T13:15:15.393 に答える