我有一个基类,其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
是静态方法,它将起作用。但是我想在函数内部使用实例成员。
我该怎么做?
答案 0 :(得分:2)
正如我所评论的那样,这对我来说似乎是一个X Y问题,而且似乎是一个有缺陷的设计, 您可以将基类更改为仅调用虚拟方法并覆盖它吗?
class Base
{
public Base()
{
}
public virtual bool func() {return false};
}
class Sub : Base
{
public Sub()
{
}
public override bool func()
{
return true;
}
}
您也可以在https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/virtual
上了解更多信息