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