[英]Force a class to implement a method without restricting the parameters in C#
我有一个包含方法void DoCommand();
的接口void DoCommand();
。 现在,我将强制所有子类继承基类方法DoCommand()
。 但是我需要每个类为该方法定义一个不同的参数,以便为具有适当参数的页面提供服务。
我怎样才能做到这一点 ? 甚至有可能!
注意:我正在构建一个ASP.NET Web应用程序,并且将实现该方法的页面已经从页面基类继承,因此我认为Interface是我唯一的选择。 因为在类的继承中只允许一个基类。
编辑
我希望说明我需要的功能可以帮助您提出更好的设计并坚持使用OOP之类的丰富概念。
我有19页,每页都需要一种方法来从此页中的输入控件收集数据并将其放在一个对象中(19页.. 19种对象)
所以我需要Collect(); 被强制执行,那么每个页面都将适当类型的对象作为参数..是否更有意义?
顺便说一句,如果您认为我的设计完全错误,欢迎使用全新的设计模式(是)
这是不可能的。 最接近的方法是让您的方法具有通用性并采用一个通用性参数:
protected abstract void DoCommand<T>(T parameter);
除此之外,您还必须使用某种类型的属性包(例如NameValueCollection
)。
我能想到的最好的是:
interface IBlaBla
{
void DoCommand(params object[] parameters);
}
然后每个类将参数作为对象序列接收。
否则,您只需要为每个类定义一个全新的方法。
该接口将需要具有所有功能(具有不同的参数)。 没有理由没有其他接口
编辑:您可能想要这样的事情(使用泛型)
public interface ICollect<T>
{
void Collect(T obj);
}
public class Car : ICollect<Car>
{
public void Collect(Car obj)
{
//Do stuff
}
}
它没有任何意义。 这违反了多态性的整个思想:基类(或接口)具有方法,子类提供其自己的实现。 如果您不是要使用通用参数,则子类的方法与基类不同,它们看起来只是具有相同的名称。 因此,您不能强迫子类实现“某些具有给定名称但任意参数的例程”。
不,那是不可能的。 但是,您可以尝试以下操作:
void DoCommand(params object[] args);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.