Он фактически ссылается на «this» в аргументах базового конструктора, чего вы не можете сделать.
Если вашему делегату действительно не нужен доступ к this
(чего не делает ваш пример)т) вы можете просто сделать это статичным.Вы также можете использовать преобразование группы методов, чтобы сделать его проще:
public class Base
{
public Base(Func<double> func)
{
double result = func();
}
}
public class Derived : Base
{
public Derived() : base(Method)
{
}
public static double Method() { return 1.0; }
}
Если вам нужно нужно использовать «this», вы можете:
- Сделайте его виртуальным методом вместо вызова делегата
Сделайте его статическим методом, который принимает соответствующий экземпляр, например
public class Base
{
public Base(Func<Base, double> func)
{
double result = func(this);
}
}
public class Derived : Base
{
public Derived() : base(x => Method(x))
{
}
private static double Method(Base b)
{
// The documentation would state that the method would only be called
// from Base using "this" as the first argument
Derived d = (Derived) b;
}
}