【发布时间】:2018-06-26 14:06:01
【问题描述】:
我有一个基类,它的 ctor 接受一个委托作为参数和一个继承自它的类。
以下工作正常:
class Base
{
public Base(Func<bool> func)
{
}
}
class Sub : Base
{
public Sub()
: base(() => true)
{
}
public Sub(int i)
: base(() => { return true; })
{
}
}
如何将实例函数作为参数传递? 编译器报错“非静态字段、方法或属性需要对象引用”。
我想要的是这样的:
class Sub : Base
{
public Sub()
: base(Func)
{
}
private bool Func()
{
return true;
}
}
如果Func 是静态方法,它会起作用。但我想在函数中使用实例成员。
我怎样才能做到这一点?
【问题讨论】:
-
这在我看来像是一个 X Y 问题,你能把你的基类改成只调用一个虚拟方法然后重写它吗?
-
@Boo 这是我会赞成的答案...(提示提示!)
-
@Boo 这假定委托必须是一个实例方法,而不是简单地让它成为一个实例方法(或其他任何东西)。
-
@Boo 我想这会起作用。我非常专注于委托,以至于我完全忘记了虚拟甚至抽象方法。