虚拟类中的抽象方法

我有一个具有许多虚方法的ac #Class,其中一些方法基本上是抽象的(它们完全在子类中实现,基类是空的)。

为了让它进行编译,我在基类中抛出一个InvalidOperationException,并对应该做什么做出评论。 这只是感觉很脏。

有没有更好的方法来设计我的课程?

编辑:对于将在加拿大运行的应用程序的中间层,一半的方法是通用的,因此是虚拟的。 一半的方法都是省特定的。

Public class PersonComponent() { public GetPersonById(Guid id) { //Code to get person - same for all provinces } Public virtual DeletePerson(Guid id) { //Common code } Public virtual UpdatePerson(Person p) { throw new InvalidOperation("I wanna be abstract"); } Public Class ABPersonComponent : PersonComponent { public override DeletePerson(Guid id) { //alberta specific delete code } public override UpdatePerson(Person p) { //alberta specific update codecode } } 

希望这是有道理的

想想你的对象层次结构。 是否要为所有派生类共享公共代码,然后在基类中实现基本function。

共享基本代码时,请注意模板模式。 使用公共方法并使用核心/共享实现将其链接到受保护的虚拟方法。 使用“Core”结束共享实现methodname。

例如:

 public abstract class BaseClass { protected virtual void DeletePersonCore(Guid id) { //shared code } public void DeletePerson(Guid id) { //chain it to the core DeletePersonCore(id); } } public class DerivedClass : BaseClass { protected override void DeletePersonCore(Guid id) { //do some polymorphistic stuff base.DeletePersonCore(id); } } public class UsageClass { public void Delete() { DerivedClass dc = new DerivedClass(); dc.DeletePerson(Guid.NewGuid()); } } 

将基类标记为抽象,以及没有实现的方法。

像这样

 public abstract class BaseClass { public abstract void AbstractMethod(); } public class SubClass: BaseClass { public override void AbstractMethod() { //Do Something } } 

您不能在抽象类之外使用抽象方法。 将类标记为抽象意味着您将无法实例化它。 但那时它没有任何意义。 对于没有实现这些方法的类,你打算做什么?

编辑:从查看你的课程,是的,我将使用UpdatePerson方法将PersonComponent抽象化。 或者,如果UpdatePerson没有为PersonComponent做任何事情保持原样,但是为PersonComponent使UpdatePerson方法为空。