我正在制作一个简单的Web表单来收集客户数据并将其输入数据库。我有5个子类:Customer,Bank,Employee,Owner和TradeReference,它们从抽象类DataEntry继承。 DataEntry具有功能public void InsertSelfIntoDataBase(int id);。 id参数是客户表中的主键(银行,雇员,所有者和TradeReference与客户具有多对一关系),因此Customer不需要插入ID(CustomerID是自动递增的)在数据库中)。目前,我的代码已经设置好,使得Bank,Employee,Owner和TradeReference在父类中实现InsertSelfIntoDataBase函数,而Customer引发NotImplementedException,因此类代码看起来像这样:public int InsertSelfIntoDataBase(){ int customerID = InsertCustomerAndReturnScalor(); return customerID;}public override void insertSelfIntoDataBase(int id){ throw new NotImplementedException("Customer does not use this function"); }这个实现有效,但是让我感到烦恼的是我必须使用NotImplementedException。就像我无法撼动我大学教授以某种方式知道并在默默地审判我的感觉。有更好的方法吗? 最佳答案 这种情况可能表示不太理想的抽象类模型。也许您可以在没有DataEntry方法的情况下实现抽象类insertSelfIntoDataBase(int),然后派生第二个抽象类,例如SelfInsertingDataEntry : DataEntry,它定义了抽象方法insertSelfIntoDataBase(int),以便具体类可以根据是否继承自任何一个他们实现了该方法。使用此技巧,由于可以将任何具体实例(无论是否实现了insertSelfIntoDataBase)都强制转换为类型DataEntry,因此将保留与其他方法有关的多态性。@Recursive在注释中也很有意思,建议将insertSelfIntoDataBase方法移动到界面中。然后,您可以使DataEntry类层次结构严格与条目类型分类法相关,并允许某些,无子孙或所有子孙实现或不实现他们希望的接口,而无需他们切换其父级。关于c# - 当子类在抽象类中不使用函数时,是否可以使用NotImplementedException?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39209521/ 10-16 20:33