2011-11-01 72 views
2

如何獲取從低級別的屬性到C#中同一類中的某些頂級屬性的引用?如何從低級別的屬性中獲取引用到C#中同一類中的某些頂級屬性?

是的..讓我們來想象一下,它有一些具有10級層次的類。我需要在某個時刻從第10級獲得第3級的某個屬性。並改變它。讓我們設想一些down-level屬性是一個Timer,它自己做一些事情並且需要這個訪問。

可以嗎?

感謝您的任何線索!

更新: 事實上,我們可以做一些外部對象,將做好這項工作......但這個想法是保持類的所有邏輯的內...

+1

10級繼承?哎呀!如何寧願構圖而不是繼承? –

+0

嗨!感謝您的輸入......是的......我有一個非常複雜的課程。我不想創建任何外部管理器來更改某些類屬性。代替它,我想在類的某個級別內實現這個管理器(讀定時器)。這就是爲什麼我需要從Timer事件訪問類的某些頂級屬性。 –

+2

您不能更改屬性,它們會在編譯時烘焙到程序集元數據中。避免通過添加更多圖層來解決複雜性。 –

回答

3

好吧,我不知道是什麼類層次結構需要10個層次(這看起來過於複雜,應該重新評估,參見從四人幫的結構模式,比如Composite或Decorator,這樣就可以減少非常大的繼承結構)。

我想理解Law of Demeter也是有益的。基本上你不應該搜索你想改變的屬性或屬性,你應該要求它。

只需創建一個接口,如第三層實現的ISpecificAttributeProvider,然後在第十層檢查當前對象是否實現了該接口。

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

嗨!看來這就是我要求的!謝謝! –

相關問題