如下代码所示:
public abstract class ReadOnlyRuleBase { public abstract string GetName() ; } public abstract class RuleBase: ReadOnlyRuleBase { public override string GetName() { return "MyTable" ;} } public class MyTable: RuleBase { //我想在这里添加约束,一定要重写 GetName 方法。怎么办? }
即: 孙类一定要继承某类的虚方法。
后来,变通处理:
public interface IReadOnlyRule { } public interface IWriteableRule { } public abstract class RuleBase { public abstract string GetName() ; } public abstract class MyTable:RuleBase , IWriteableRule { public override string GetName(){ return "MyTable" ;} }
后来,想到一个变通的办法:
public abstract class ReadOnlyRuleBase { public abstract string GetName() ; } public abstract class RuleBase: ReadOnlyRuleBase { public override string GetName() { return GetRuleName() ;} protected abstract string GetRuleName() ; } public class MyTable: RuleBase { // 一定要重写 GetRuleName , 来达到重写爷类的 GetName 方法的目的。 }
这也只是三级的处理方式,每多一级,就会多一个方法,让子类重写,用规范约束好的话,也可以接受。