定义抽象方法而不指定参数

时间:2011-02-01 14:52:32

标签: c#

我正在用抽象方法编写一个抽象类(因此,从它继承的所有类都必须实现该方法)。但是,我不想指定方法必须使用的参数,因为每个方法可能采用不同的参数或不参数。只有名称和返回值应该相同。

有没有办法在C#中执行此操作?

感谢您的帮助!

4 个答案:

答案 0 :(得分:19)

不,这样做毫无意义。如果您没有声明参数,则无法仅在给定基类的引用的情况下调用该方法。这就是抽象方法的要点:允许调用者不关心具体的实现,而是给他们一个API来使用。

如果调用者需要知道确切的方法签名,那么您已将该调用者与具体实现联系起来,使得抽象基本无用。

也许如果你能提供更多细节,我们可以提出更合适的方法吗?例如,您可以将类型设为通用:

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

具体子类型可以是通用的,或者例如从Foo<string>派生。

答案 1 :(得分:2)

没有。你为什么需要它?也许Command Design Pattern可以在这里提供帮助。

答案 2 :(得分:1)

你要做的是代码味道。

更好的模式是让您的抽象类实现ISupportInitialize,然后使用抽象的Act()方法。

这个想法是,在对BeginInitEndInit的调用之间,当您的孩子类型准备采取行动时,收集您试图塞进随机类型和数量的参数的不同信息。配置完成后,调用EndInit(此处验证)可以调用抽象Act()

另外,请不要这样做:

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

如果你这样做,人们会追捕你。

答案 3 :(得分:0)

不,没有。

要覆盖方法,您必须匹配方法签名。这包括方法名称和格式参数。