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

C# 定义抽象方法而不指定参数,c#,C#,我正在用一个抽象方法编写一个抽象类(因此,从它继承的所有类都必须实现该方法)。但是,我不想指定该方法必须使用的参数,因为每个方法可能接受不同的参数,或者没有参数。只有名称和返回值应该相同 有没有办法在C#中做到这一点 谢谢你的帮助 不,这样做是没有意义的。如果您没有声明参数,您将无法调用只引用基类的方法。这就是抽象方法的要点:允许调用方不关心具体的实现,而是给它们一个API来使用 如果调用者需要知道确切的方法签名,那么您已经将该调用者绑定到了具体的实现,这使得抽象在本质上毫无用处 也许如果你能提

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

有没有办法在C#中做到这一点


谢谢你的帮助

不,这样做是没有意义的。如果您没有声明参数,您将无法调用只引用基类的方法。这就是抽象方法的要点:允许调用方不关心具体的实现,而是给它们一个API来使用

如果调用者需要知道确切的方法签名,那么您已经将该调用者绑定到了具体的实现,这使得抽象在本质上毫无用处

也许如果你能提供更多细节,我们可以建议一个更合适的方法?例如,您可以将类型设置为泛型:

public class Foo<T>
{
    public abstract void Bar(T t);
}
公共类Foo
{
公开摘要无效栏(T);
}
具体的子类型也可以是泛型,或者派生自例如
Foo

不,没有


若要重写方法,必须匹配方法签名。这包括方法名称和格式参数。

否。为什么需要它?也许在这方面可以有所帮助。

您试图做的是一种代码气味

更好的模式是让抽象类实现,然后有一个抽象的
Act()
方法

其思想是,在调用
BeginInit
EndInit
之间,当您的子类型准备采取行动时,收集您试图塞进随机类型和数量的参数中的不同信息位。一旦配置,并且调用了
EndInit
(在此处验证),就可以调用抽象
Act()

此外,请不要这样做:

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

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

每个孩子都必须创建此方法的实现,它可以接受不同类型的输入,但会产生相同类型的输出。因此,我可以使用输出来执行程序的逻辑。@TheBoss:抽象类(如接口)的目的是允许对公共功能进行..嗯..抽象。您不能使用它来定义类似“您需要一个名为
Foo
的函数,它接受一些(或不接受)参数并返回一个
int
”;这样的函数不能抽象,因为它的签名是未定义的。如果代码引用的类的级别高于定义特定签名的级别,则不可能调用(非反射)该类,打破抽象。@TheBoss:我认为你应该考虑使用泛型来解决你的设计难题,就像Jon发布的代码示例一样。问题是,如果你知道使用的未知参数的数量,泛型就可以使用,但是在我的例子中,参数的数量可能会有所不同。@TheBoss:那么它不适合这个特殊的情况,但是继承也不适合一般情况……这是一种有趣的方法。因此,我在类中有一个布尔字段,它将指示初始化何时完成,只有到那时,Act()方法才能成功执行,否则它将引发异常?@TheBoss标准技术是在EndInit上验证实例的状态,如果实例的状态不正确,则抛出。实现此接口的类型通常在调用EndInit后使自己不可变。