我有以下抽象类:Action委托参数不匹配使用实现抽象类
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.
}
我然后有类A,它实现的BaseClass。我正尝试将Mutators.VariantA分配给增变器委托,但我无法。
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)
需要A
类型的对象,并采取了行动声明为接受BaseClass
类型的输入,但是作为类A
执行BaseClass
我想我可以做到这一点?
从动态类型语言编辑我有一个艰难的时间去认真处理这样:(
与类型的合作有没有什么办法可以指向一个功能与抽象类型的输入这样一来?我需要看一些其他的设计模式?
感谢
'乔恩Skeet'你的方式toooooo'Fast'笑 – MethodMan
我之所以有一个mutator是因为我需要能够让用户指定他们想要在一个拥有不同数据类型的类上执行什么类型的变化。我也希望能够设置自定义的增变函数。感谢您为我清除Jon。 – Sherlock