個人的にはコードの臭いと思います。
あなたが言うように、それらがいくつかの基本機能を持っていない限り-それらは持っていません-それらは抽象的でなければならず、派生クラスに実装を提供することを強制します。
一部の派生クラスにこれらのメソッドの実装がない場合は、設計に問題がある可能性があります。
このことを考慮:
public abstract class Animal
{
public abstract string Speak();
}
public class Dog : Animal
{
public override string Speak()
{
Console.WriteLine("Woof");
}
}
public class Cat : Animal
{
public override string Speak()
{
Console.WriteLine("Meow");
}
}
これまでのところすべて問題ありませんが、話せない動物を追加したい場合はどうでしょうか。
public class Ant : Animal
{
public override string Speak()
{
// do nothing - ants don't speak.
}
}
私の意見ではこれは悪いです。誰かがこれを行う可能性があります(あなたが説明したこと)。
public abstract class Animal
{
public string Speak()
{
// not abstract because not all derived animals speak.
}
}
私の意見では、これは優れていますが、それでも素晴らしいとは言えません。この状況で私が見たいのは、Speakをインターフェースに移動し、話すことができる動物だけがそれを実装するか、またはこのようなものです。
public abstract class Animal
{
}
public abstract class Mammal : Animal
{
public abstract string Speak();
}
public class Dog : Mammal
{
public override string Speak()
{
Console.WriteLine("Woof");
}
}
public class Cat : Mammal
{
public override string Speak()
{
Console.WriteLine("Meow");
}
}
public class Ant : Animal
{
}