Используйте виртуальный метод.Поместите ваш код в классы, с которыми они работают, а не в некоторый код, который получает ссылку на класс.
public class SysState {
/* nothing much here, except...: */
public abstract virtual void DoSomething();
}
public class Normal : SysState {
/* properties & methods */
public override void DoSomething()
{
// ...
}
}
public class Foobar : SysState {
/* different properties & methods */
public override void DoSomething()
{
// ...
}
}
SysState result = SomeFunctionThatReturnsObjectDerivedFromSysState();
result.DoSomething();
Это выполнит метод DoSomething производного класса.Это называется полиморфизмом и является наиболее естественным (и некоторые утверждают, что единственное правильное ) использование наследования.
Обратите внимание, что SysState.DoSomething не обязательно должен быть абстрактным для этогоработать, но он должен быть виртуальным.