我正在用抽象方法编写一个抽象类(因此,从它继承的所有类都必须实现该方法)。但是,我不想指定方法必须使用的参数,因为每个方法可能采用不同的参数或不参数。只有名称和返回值应该相同。
有没有办法在C#中执行此操作?
感谢您的帮助!
答案 0 :(得分:19)
不,这样做毫无意义。如果您没有声明参数,则无法仅在给定基类的引用的情况下调用该方法。这就是抽象方法的要点:允许调用者不关心具体的实现,而是给他们一个API来使用。
如果调用者需要知道确切的方法签名,那么您已将该调用者与具体实现联系起来,使得抽象基本无用。
也许如果你能提供更多细节,我们可以提出更合适的方法吗?例如,您可以将类型设为通用:
public class Foo<T>
{
public abstract void Bar(T t);
}
具体子类型可以也是通用的,或者例如从Foo<string>
派生。
答案 1 :(得分:2)
没有。你为什么需要它?也许Command Design Pattern可以在这里提供帮助。
答案 2 :(得分:1)
你要做的是代码味道。
更好的模式是让您的抽象类实现ISupportInitialize,然后使用抽象的Act()
方法。
这个想法是,在对BeginInit
和EndInit
的调用之间,当您的孩子类型准备采取行动时,收集您试图塞进随机类型和数量的参数的不同信息。配置完成后,调用EndInit
(此处验证)可以调用抽象Act()
。
另外,请不要这样做:
public abstract void Act(params object[] arguments);
如果你这样做,人们会追捕你。
答案 3 :(得分:0)
不,没有。
要覆盖方法,您必须匹配方法签名。这包括方法名称和格式参数。