C #.Могу ли я автоматически заменить производный класс вместо базового класса - PullRequest
0 голосов
/ 19 декабря 2011

Язык - 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;
        }
    }

например, добавив некоторый атрибут в класс А или что-то еще?
Извините за дерьмовое форматирование.

Ответы [ 2 ]

1 голос
/ 19 декабря 2011

Вы можете использовать дженерики, чтобы сделать это безопасным для типов способом:

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, и в этом случае я бы использовал приведение (если структура класса означает, что приведение не будет неудачным) или переопределение вашей объектной модели .

0 голосов
/ 19 декабря 2011

Вы можете разыграть bc как DerivedClass, если вы уверены, что это так.

class A:B
{
    protected override void Method(BaseClass bc)
    {
        ((DerivedClass)bc).DerivedClassField = blabla;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...