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

时间:2018-06-26 14:06:02

标签: c# delegates

我有一个基类,其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是静态方法,它将起作用。但是我想在函数内部使用实例成员。

我该怎么做?

1 个答案:

答案 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

上了解更多信息