将成员函数作为委托参数传递
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将成员函数作为委托参数传递相关的知识,希望对你有一定的参考价值。
我有一个基类,其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问题,并且看起来像一个有缺陷的设计,你能改变你的基类只是调用一个虚方法然后覆盖它吗?
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上阅读更多相关信息
以上是关于将成员函数作为委托参数传递的主要内容,如果未能解决你的问题,请参考以下文章
如何将成员函数作为与 Windows 上的蓝牙相关的参数回调函数传递?