将成员函数作为委托参数传递

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上阅读更多相关信息

以上是关于将成员函数作为委托参数传递的主要内容,如果未能解决你的问题,请参考以下文章

如何将成员函数作为参数传递?

将成员函数作为参数传递/c++

如何将成员函数作为与 Windows 上的蓝牙相关的参数回调函数传递?

C ++:将成员函数作为普通函数指针传递的闭包

E0312, C2664 尝试将矢量对象作为函数参数传递时出错

在C代码中将结构体变量作为参数传递效率忒低