2011-11-01 22 views
2

低レベルのクラス属性から、同じクラス内のいくつかの最上位レベルの属性に参照を取得するにはどうすればいいですか?低レベルのクラス属性からC#の同じクラス内のトップレベルの属性に参照を取得するにはどうすればよいですか?

ええ.. 10階層の階層があるクラスがあるとしましょう。そして、あるレベルでは、第10レベルから第3レベルの属性への参照を取得する必要があります。それを変えてください。下位レベルの属性の中には、何かを行い、このアクセスを必要とするTimerであると考えてみましょう。

できますか?

ありがとうございました!

UPDATES: 確かに私たちは、この仕事をするいくつかの外部のオブジェクトを行うことができます...しかし、アイデアは、クラスの内部のすべてのロジックを維持することです...

+1

10レベルに役立ちますか? Yikes!継承よりも構成を好むのはどうですか? –

+0

こんにちは!入力をありがとう...うん...私は本当に複雑なクラスがあります。私はいくつかのクラス属性を変更するために外部マネージャを作成したくありません。その代わりに、クラスのあるレベル内でこのManager(Timerを読み込む)を実装したいと思います。そのため、Timerイベントからクラスのトップレベルの属性にアクセスする必要があります。 –

+2

属性を変更することはできません。属性はコンパイル時にアセンブリメタデータに焼き付けられます。より多くのレイヤーを追加して複雑さに対処しないでください。 –

答えて

3

まあ、私は確信してどのようなクラスではありませんよ階層は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(); 
    } 
} 

希望これは、継承の

+0

こんにちは!これは私が求めているようだ!ありがとうございました! –

関連する問題