Есть дочерний класс, он оверайдит некоторые методы родительского. И вопрос в том, как можно заоверайдить только те методы, которые нужны предположим по каким то условиям. Возможно это проще через рефлексию сделать или через какой то алгоритм.
Для примера:
public class A
{
public virtual void TestA()
{
Console.WriteLine("test");
}
public virtual void TestB()
{
Console.WriteLine("test");
}
}
public class B : A
{
public B(bool condition)
{
if (condition)
// если true переопределить один метод, иначе два метода
}
public override void TestA()
{
Console.WriteLine("testA");
}
}
Как сделать чтобы в классе B можно было скажем по параметрам переданным в конструктор переопределить только нужный метод, или методы, заранее не зная что будет передано.
При переопределении метода, всегда можно вызывать оригинальную реализацию через ключевое слово base
:
public override void TestA() {
if (this.condition)
Console.WriteLine("TestA");
else base.TestA();
}
Вам нужен не один класс, а два:
public class B : A
{
public override void TestA()
{
Console.WriteLine("testA");
}
}
public class B1 : B
{
public override void TestB()
{
Console.WriteLine("testB");
}
}
И такой простой фабричный метод:
public static class BFactory
{
public static B Create(bool condition)
=> condition ? new B() : new B1();
}
Теперь, вместо использования конструктора new B()
, используйте этот метод:
var b = BFactory.Create(/*здесь ваше выражение*/);
Uranus все правильно написал. Приведу просто полный код для класса B:
public class A
{
public virtual void TestA()
{
Console.WriteLine("A: testA");
}
public virtual void TestB()
{
Console.WriteLine("A: testB");
}
}
public class B : A
{
private readonly bool _condition;
public B(bool condition)
{
_condition = condition;
}
public override void TestA()
{
if (_condition)
Console.WriteLine("B: testA");
else
base.TestA();
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Появилось требование к дополнению интерфейса самого unity, и хотелось бы узнать, это вообще возможно или нет
Хочу создать консольное приложение, которые бы подключается к Linux серверу, делает бэкап и выгружает все это в exelПроблема встала на авторизации...
Есть <Image x:Name="Zoomage" Height="100" Width="150" RenderTransformOrigin="05,0
Нужно что бы работало вот так First EF Core Console Application