背景:私はまだ C# の初心者であり、これは継承を使用した最初の大きなプロジェクトです。次の話は、私の現在の状況を単純化した例です。
というクラスがあるとしLivingOrganismます。すべての生物は、このクラスをベースとして使用し、すべての生物に共通する機能を継承できます。
derivedこれらのクラスのいくつかに取り組んでいたときに、バナナと人間が非常に似ていることがわかりました。あまり意味がなく、見た目も似ていませんが、「機能」のほとんどは共通しているようです。
コードの重複はよくないので、メンテナンス コストを削減するために新しいクラスを作成しました。このクラスの名前: BananaHuman. 私HumanのクラスとBananaクラスはから継承しBananaHumanます。
問題:
BananaHuman に問題はありません (つまり、BananaHuman の意味と存在理由を理解しています)。しかし、最終的には、他の人 (継承を (完全に) 理解していない人でも) は、私のLivingCreatures.dllを使用する必要があります。また、「B」と入力したときにインテリセンスが BananaHuman を提案する理由も理解できません。
そして、次のコードを検討してください。
//Valid and makes sense.
foreach(LivingOrganism foo in cityOfNeyYork) { /*embedded statement*/ }
Living Organismしかし、 で置き換えると、それがどれほど奇妙/混乱するか想像してみてくださいBananaHuman。
または(名前空間BananaHuman privateで定義された要素をそのように明示的に宣言することはできません) を作成できません。私もそうしなければならないので、それを作ることはできません。これを試してみると、問題があるというエラー メッセージが表示されます。protectedprotected internalinternalHumanBanana publicinconsistent accessibility
明らかなことを見逃しているように感じますが、どうすればよいですか? いくつかのオプション/質問が残っています。
BananaHuman混乱を避けるために「非表示」にすることはできますか?BananaHumanのように非常に長く技術的なものに書き直す必要がDnaRelatedOrganismsType[X]ありますか? ここで、「X」はそれらの固有の関係を表します。- 何かを変更する必要がある場合は、単に削除
BananaHumanし、継承しHumanて継承し、追加のメンテナンスを行う必要がありますか?BananaLivingOrganism - 私が完全に見逃している別の解決策はありますか?
私は周りを検索しましたが、この状況の「固定パターン」を見つけることができませんでした. 似たようなタイトルのこの質問を見つけましたが、まったく別のことを尋ねているように見えるため、回答が当てはまるかどうかはわかりません。
どんな助けでも大歓迎です!