Передача в функции-члены в качестве параметров делегата - PullRequest
0 голосов
/ 26 июня 2018

У меня есть базовый класс, 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 голосов
/ 26 июня 2018

Как прокомментировано, это выглядит для меня как проблема 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...