我正在尝试创建一个基类,它为从它派生的许多类提供了大量可重用的功能。通过提供此功能,我还要求派生类也实现某些方法,即实现接口。但是,我不想明确告诉他们实现接口所需的派生类,我希望在基类中定义该需求。所以基本上,一旦一个类从基类继承,它就会获得功能,但也需要自己实现其他方法。这就是我想要的,而且老实说我不确定这是否可行:
public interface IExtraStuff {
bool test();
}
public class BaseControl : System.Web.UI.UserControl, IExtraStuff {
public bool foo(){
return true;
}
// I don't actually want to implement the test() method in this
// class but I want any class that derives from this to implement it.
}
MyUserControl1 : BaseControl {
// this.foo() can be used here
// according to IExtraStuff from the BaseControl, I need to implement test() here
}
基本上我不想将MyUserControl1
定义为:
MyUserControl1 : BaseControl, IExtraStuff
我希望它在继承BaseControl
的额外功能后自动要求界面。
如果无法做到这一点,请告诉我,那很好。我只是对此不太了解。正如我目前编写的,它编译,我觉得我应该得到一个编译错误,因为test()
中没有定义MyUserControl1
。
更新
我已经将我的基类修改为抽象(我在发布到SO之前已经完成了这个)但我实际上可以在不实现抽象方法的情况下构建项目,这就是为什么我开始提出这个问题的原因。下面的代码为我构建,我很困惑:
public interface IExtraStuff {
bool test();
}
public abstract class BaseControl : System.Web.UI.UserControl, IExtraStuff {
public abstract bool test();
public bool foo(){
return true;
}
}
MyUserControl1 : BaseControl {
// this.foo() can be used here
// I can build without implementing test() here!
}
更新2:问题已解决
事实证明我的解决方案构建设置存在问题,除非我从基础(现在)实现抽象方法,否则项目不会构建。这是我在Visual Studio中的错误,而不是类架构中的错误。感谢所有人的帮助!
答案 0 :(得分:4)
使用抽象方法?
public abstract class BaseControl : System.Web.UI.UserControl, IExtraStuff {
public bool foo(){
return true;
}
public abstract bool test();
}
有关详情,请参阅: http://msdn.microsoft.com/en-us/library/aa664435(VS.71).aspx
修改强> 添加dervied class impl。
public class MyCustomControl : BaseControl {
public override bool test()
{
//Add Code...
}
}
答案 1 :(得分:2)
这就是抽象类和方法的用途
public abstract class BaseControl : IExtraStuff
{
public abstract bool test();
}
注意,该类也需要标记为抽象
答案 2 :(得分:1)
如果将BaseControl设为抽象类,则可以省略接口成员,因此强制实现子类。