まあ、私は確信してどのようなクラスではありませんよ階層は10レベルが必要です(複雑すぎるので、Gang of FourのStructural Patternsはコンポジットやデコレータのように非常に大きな継承構造を減らす必要があります)。
私はLaw of Demeterを理解することも同様に有益だろうと思います。基本的には、変更したいプロパティや属性を検索しないでください。単にそれを求めてください。
第3レベルで実装されているISpecificAttributeProviderのようなインターフェイスを作成し、現在のオブジェクトがそのインターフェイスを実装しているかどうかを10番目のレベルで確認します。
public interface ISpecificAttributeProvider
{
object GetSpecificAttribute();
}
public class ThirdLevel : SecondLevel, ISpecificAttributeProvider
{
private object _attributeInQuestion;
public object GetSpecificAttribute()
{
return _attributeInQuestion;
}
}
public class TenthLevel: NinthLevel
{
public void Method()
{
if (this is ISpecificAttributeProvider)
object attribute = GetSpecificAttribute();
}
}
希望これは、継承の
10レベルに役立ちますか? Yikes!継承よりも構成を好むのはどうですか? –
こんにちは!入力をありがとう...うん...私は本当に複雑なクラスがあります。私はいくつかのクラス属性を変更するために外部マネージャを作成したくありません。その代わりに、クラスのあるレベル内でこのManager(Timerを読み込む)を実装したいと思います。そのため、Timerイベントからクラスのトップレベルの属性にアクセスする必要があります。 –
属性を変更することはできません。属性はコンパイル時にアセンブリメタデータに焼き付けられます。より多くのレイヤーを追加して複雑さに対処しないでください。 –