У меня есть следующий абстрактный класс:Действие параметры делегата не совпадают с использованием реализован абстрактный класс
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. Я пытаюсь назначить 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
Я думал, что смог бы это сделать?
Исходя из динамически типизированных языков, я имею трудное время схватившись с работой с типами таким образом :(
Есть ли способ, я могу указать на функцию с входом абстрактного типа в таким образом? Мне нужно, чтобы посмотреть на какой-то другой шаблон дизайна ли?
Благодаря
'Jon Skeet' вы путь toooooo' Fast' лол – MethodMan
Причина у меня есть мутатором является то, что я должен иметь возможность разрешить пользователю указывать, какую мутацию они хотели бы выполнять в классе, который содержит различные типы данных. Я также хочу иметь возможность разрешать настраиваемые функции мутаторов. Спасибо, что расчистил это для меня Джон. – Sherlock