如果我使用继承财产,并且后来认识到,单一子类需要一种无法利用的方法或领域,我是否宣布,在基类,而不是在其他子类中执行,或者我是否在该次子级宣布这样做?
如果我选择宣布分流中的方法,那么我再也无法以多变方式处理所有问题。 另一方面,如果我选择将其归入基类,那么我最后会发现许多子类,不执行财产或方法。 我在网上框架中看到了选择不执行办法的例子。 前进的最佳途径是什么?
如果我使用继承财产,并且后来认识到,单一子类需要一种无法利用的方法或领域,我是否宣布,在基类,而不是在其他子类中执行,或者我是否在该次子级宣布这样做?
如果我选择宣布分流中的方法,那么我再也无法以多变方式处理所有问题。 另一方面,如果我选择将其归入基类,那么我最后会发现许多子类,不执行财产或方法。 我在网上框架中看到了选择不执行办法的例子。 前进的最佳途径是什么?
如果只有一个子级有X方法,当然,你可以按定义使用X多种形态。 X在超级阶级(因此在任何地方)中存在是否合理,但在大多数情况下是一无选择? 有时,你不得不重新思考整个阶层的等级,即:为什么do<>/strong>。 你们想要说的是多吗? 哪里可能不存在(或最好不可行)? 如果不了解很多情况,就不可能做出反应。 更确切地说,你的具体使用案例!
A方法不属于基类,除非所有可能的衍生产品都得到适当的执行。
If you have to throw NotSupportedException in some of your derivations, then you have broken the Liskov Substitution Principle. This principal basically states than any derived class should be appropriate whenever a base class is expected.
公众与某个阶层的联系应尽可能协调一致。 如果我面临这种选择,我几乎总是把它归入衍生类别,除非我really认为这一行动属于基地。
<>Update>
我要重复我先前的发言。 正如Wayne Hartman所指出的,如果情况确实如此,那么。 系统.IO.Stream
也将打破低功能系统。 该规则规定,你不能对次类方法提出新的例外。 这似乎不适用于抽象方法,因为它们没有执行。
我认为,重要的是保持你的抽象性。 如果从你的抽象观点来看,在基数类别中增加这种方法是有意义的,那么就以一切手段这样做。 然而,如果你只是想增加守则,那么我会避免在基础中增加。
我还同意,有时为了一致性而部分执行是适当的。
它只是一种子类需要的专门方法吗? 然后在子类执行。 否则,作为基本阶层的虚拟执行,放弃了“不执行”的接受。 之后,在任何需要的情况下,它作为压倒性添加。
如果只能在子类使用,不需要多变,则只在子类执行。 然而,如果你需要多变地利用这一功能,那么就想到这一功能对超级类别的其他子类意味着什么。
如果这一职能没有很好的意义,那么你可能需要重新考虑你的等级。 然而,如果职能没有有效意义,你就只能对子类实行禁忌或放弃。 我实际上不是一股狂热的,但有时却在使用上 t。
我总是宁愿使用<代码> NotImplemented风格的例外情况处理尚未完成的代码。 我永远不会亲自使用它,因此,我可以把更多的方法推向一个基类。
就此,您需要回答关于您的意向的一些问题。
考虑<代码>System.IO.Stream,这是一个抽象的类别,有抽象的寻求业务方法,因此不必从<代码>System.IO.SeekableStrem上提取。 仅仅为了寻求功能,APIC的用户只应当提到Stream
。