Определить абстрактный метод без указания параметров

Я пишу абстрактный класс с абстрактным методом (таким образом, все наследуемые от него классы должны реализовать этот метод). Однако я не хочу указывать параметры, которые должен использовать метод, поскольку каждый метод может принимать разные или никакие параметры. Только имя и возвращаемое значение должны быть одинаковыми.

Есть ли способ сделать это на С#?

Спасибо за любую помощь!

Ответ 1

Нет, и было бы бессмысленно это делать. Если вы не объявили параметры, вы бы не смогли вызвать метод, заданный только ссылкой на базовый класс. То, что точка абстрактных методов: позволить вызывающим абонентам не заботиться о конкретной реализации, а предоставлять им API для использования.

Если вызывающему абоненту необходимо знать точную подпись метода, вы привязали этого вызывающего абонента к конкретной реализации, что делает абстракцию практически бесполезной.

Возможно, если бы вы могли дать более подробную информацию, мы могли бы предложить более подходящий подход? Например, вы можете создать тип generic:

public class Foo<T>
{
    public abstract void Bar(T t);
}

Конкретные подтипы могут также быть либо обобщенными, либо выводиться из Foo<string>, например.

Ответ 3

То, что вы пытаетесь сделать, это запах кода.

Лучшим вариантом было бы реализовать ваш абстрактный класс ISupportInitialize, а затем иметь абстрактный метод Act().

Идея заключается в том, что между вызовами BeginInit и EndInit является то, когда ваши дочерние типы готовятся к действию, собирая разные биты информации, которую вы пытаетесь втиснуть в случайные типы и количество аргументов. После настройки и EndInit вызывается (проверяем здесь) можно вызывать абстрактный Act().

Кроме того, пожалуйста, ПОЖАЛУЙСТА, не делайте этого:

public abstract void Act(params object[] arguments);

Люди будут охотиться на вас, если вы сделаете что-то вроде этого.

Ответ 4

Нет, нет.

Чтобы переопределить метод, вы должны соответствовать сигнатуре метода. Сюда входят имя метода и параметры формата.