子クラスの関数が抽象的な親クラスのクラスであることを強制したいと思います。例:ここでは抽象クラスでの子クラス型の変数の宣言
abstract class Animal {
public abstract void Add(Animal animal);
}
class Cat: Animal {
public override void Add(Cat cat) {
//Do cat things
}
}
class Dog: Animal {
//This should not be allowed
public override void Add(Animal dog) {
//Do dog things
}
}
我々はCat
型オブジェクトがDog.Add
に渡すことができることを参照してください。関数を実行してDog
とする方法はありますか?
私はそれが実行時にチェックされる方法があると信じていますが、可能であれば、コンパイラエラーが多くなるでしょう。
これを行うと、子クラスは動物クラスのAddメソッドを実装しないため、これは不可能です。基本クラスで抽象メソッドを宣言する場合、このメソッドは子クラスで実装する必要があります。あなたの要件は何か、なぜこれをやりたいのかを指定できますか? –
ええと、それは良い点です。私は同じクラスの他のインスタンスを取るいくつかのメソッドを持つユーザーのための抽象的な 'Effect'クラスを提供しています。しかし、ユーザーがメソッドを定義しているので、ユーザーがさまざまな種類の「エフェクト」を通過させたいというユースケースがあると思います。 –