背景:私はまだ 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
で定義された要素をそのように明示的に宣言することはできません) を作成できません。私もそうしなければならないので、それを作ることはできません。これを試してみると、問題があるというエラー メッセージが表示されます。protected
protected internal
internal
Human
Banana
public
inconsistent accessibility
明らかなことを見逃しているように感じますが、どうすればよいですか? いくつかのオプション/質問が残っています。
BananaHuman
混乱を避けるために「非表示」にすることはできますか?BananaHuman
のように非常に長く技術的なものに書き直す必要がDnaRelatedOrganismsType[X]
ありますか? ここで、「X」はそれらの固有の関係を表します。- 何かを変更する必要がある場合は、単に削除
BananaHuman
し、継承しHuman
て継承し、追加のメンテナンスを行う必要がありますか?Banana
LivingOrganism
- 私が完全に見逃している別の解決策はありますか?
私は周りを検索しましたが、この状況の「固定パターン」を見つけることができませんでした. 似たようなタイトルのこの質問を見つけましたが、まったく別のことを尋ねているように見えるため、回答が当てはまるかどうかはわかりません。
どんな助けでも大歓迎です!