Есть дочерний класс, он оверайдит некоторые методы родительского. И вопрос в том, как можно заоверайдить только те методы, которые нужны предположим по каким то условиям. Возможно это проще через рефлексию сделать или через какой то алгоритм.
Для примера:
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();
}
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей