次の抽象クラスがあります。
public abstract class BaseClass{
public object contents { get; set; }
public Action<BaseClass> mutator;
public abstract void Initialise();
}
これはいくつかのクラスで使用され、Initialize
メソッドをオーバーライドして に値を割り当てます。これは、特定の時点でデリゲートをcontents
使用して変更されます。mutator
次の静的クラスがあり、各メソッドは として使用することを目的としていますmutator
:
public static class Mutators{
public static void VariantA(A inputObj){
// inputObj.contents = something else
}
public static void VariantB(A inputObj) { } // etc. etc.
}
次に、BaseClass を実装するクラス A があります。Mutators.VariantA を mutator デリゲートに割り当てようとしていますが、できません。
public class A : BaseClass{
public A(){
mutator = Mutators.VariantA;
}
public override void Initialise(){
/* set the value of contents property here */
}
}
具体的には、次のエラーが発生します: A method or delegate
Mutators.VariantA(A)' パラメーターがデリゲートと一致しませんSystem.Action<BaseClass>(BaseClass)' parameters (CS0123)
Mutators.VariantA(A)
type のオブジェクトが必要A
であり、 Action が type の入力を受け入れるように宣言されていることは理解していますがBaseClass
、クラスのA
実装として、BaseClass
これを行うことができると思いましたか?
動的に型付けされた言語から来て、この方法で型を操作するのに苦労しています:(
このように抽象型の入力を持つ関数を指す方法はありますか? 他のデザインパターンを見る必要がありますか?
ありがとう