Определить абстрактный метод без указания параметров
Я пишу абстрактный класс с абстрактным методом (таким образом, все наследуемые от него классы должны реализовать этот метод). Однако я не хочу указывать параметры, которые должен использовать метод, поскольку каждый метод может принимать разные или никакие параметры. Только имя и возвращаемое значение должны быть одинаковыми.
Есть ли способ сделать это на С#?
Спасибо за любую помощь!
Ответы
Ответ 1
Нет, и было бы бессмысленно это делать. Если вы не объявили параметры, вы бы не смогли вызвать метод, заданный только ссылкой на базовый класс. То, что точка абстрактных методов: позволить вызывающим абонентам не заботиться о конкретной реализации, а предоставлять им API для использования.
Если вызывающему абоненту необходимо знать точную подпись метода, вы привязали этого вызывающего абонента к конкретной реализации, что делает абстракцию практически бесполезной.
Возможно, если бы вы могли дать более подробную информацию, мы могли бы предложить более подходящий подход? Например, вы можете создать тип generic:
public class Foo<T>
{
public abstract void Bar(T t);
}
Конкретные подтипы могут также быть либо обобщенными, либо выводиться из Foo<string>
, например.
Ответ 2
Нет. Зачем тебе это? возможно, шаблон проектирования команд может помочь здесь.
Ответ 3
То, что вы пытаетесь сделать, это запах кода.
Лучшим вариантом было бы реализовать ваш абстрактный класс ISupportInitialize, а затем иметь абстрактный метод Act()
.
Идея заключается в том, что между вызовами BeginInit
и EndInit
является то, когда ваши дочерние типы готовятся к действию, собирая разные биты информации, которую вы пытаетесь втиснуть в случайные типы и количество аргументов. После настройки и EndInit
вызывается (проверяем здесь) можно вызывать абстрактный Act()
.
Кроме того, пожалуйста, ПОЖАЛУЙСТА, не делайте этого:
public abstract void Act(params object[] arguments);
Люди будут охотиться на вас, если вы сделаете что-то вроде этого.
Ответ 4
Нет, нет.
Чтобы переопределить метод, вы должны соответствовать сигнатуре метода. Сюда входят имя метода и параметры формата.