Liskov Substition成
-
23-08-2019 - |
質問
もう言いクラスのようになります:
public sealed class Foo
{
public void Bar
{
// Do Bar Stuff
}
}
やりたいで付け加える〔添える〕超えて拡張手法が....マオプションを構成:
public class SuperFoo
{
private Foo _internalFoo;
public SuperFoo()
{
_internalFoo = new Foo();
}
public void Bar()
{
_internalFoo.Bar();
}
public void Baz()
{
// Do Baz Stuff
}
}
この作品では、多くの作---しかしまだまだ走る問題:
public void AcceptsAFoo(Foo a)
んで、Fooがないスーパー Fooため、C#ないという考えSuperFoo真には満のLiskov置換の意味で---これが私の拡張されたクラスにより組成の非常に限られます。
なので、唯一の方法で修正はこれからのAPIのデザイナーの左インターフェースの敷設の周り:
public interface IFoo
{
public Bar();
}
public sealed class Foo : IFoo
{
// etc
}
今では、実施IFooにSuperFoo(年SuperFoo既に実施しFooがうかがわせるものとなっていを変える自筆の署名
public class SuperFoo : IFoo
のブランド"トーキョーバイクの方法消費Foo消費すIFoo:
public void AcceptsAFoo(IFoo a)
現在、C#の理解との関係をSuperFoo、Fooにより、一般的なインターフェースおよびすべての正することができます。
の大きな問題ということです。ネルシールの授業がうまきへいを通じて、外科的-非外科的な実施に関する共通インターフェース、API方法をとるFooは受け入れSuperFooことができませんを追加する。
ですから、すべての構成ファン出があります。かりこの制限?
しかし、面白いことに思いをは露出させるために内部Foo公開うにすることで渡すことができたものと思われる汚.
解決
私の答えはできないことをやるという、すなわちパスのインスタンス変数です。
す え を明示または黙示のキャストできるようになると、その実装は、単に渡されたのインスタンス)がこのことは、IMO(国際海事機関われます。
sixlettervariableの答えは良い焼き直しが正しく表示する授業をまたが延長したものかどうかを知ることができまうのを防止します。
他のヒント
ったのかと問いかけでしていた再利用可能な図書館を自作してました。多くの巻き上げる授業のたばかりの延長はできませんを必要とせず不明瞭化、難解配列の話からは、実装者が決定します。
がクラスを拡張し、お願い:ばーぶ私のクラスパスをエレクトロニクスデバイスへのmy libraryでいつ透明な仕事エレクトロニクスデバイス?で働いていくエレクトロニクスデバイス?は、エレクトロニクスデバイスか行動する"は同一者でもいいですか?
がその場で発音を確認することがほとんどの時間封印されたクラス。Netフレームワークとしての下にフードの要件となり、現在の実装できませんの安全に晒されるサブクラス.
これは当てはまりません確にお答え、その洞察としてなすべてのクラスの継承可能。Netフレームワーク(ょきょうどシールのクラスがあります。