C#. Могу ли я автоматически заменить производный класс вместо базового
Язык 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 или что-то еще?
Извините за дерьмовое форматирование.
2 ответа
Решение
Вы можете использовать дженерики, чтобы сделать это безопасным для типов способом:
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
в этом случае я бы использовал приведение (если структура класса означает, что приведение не завершится неудачей) или переопределил вашу объектную модель.
Вы можете разыграть bc
как DerivedClass
, если вы уверены, что это то, что есть.
class A:B
{
protected override void Method(BaseClass bc)
{
((DerivedClass)bc).DerivedClassField = blabla;
}
}