如何獲取從低級別的屬性到C#中同一類中的某些頂級屬性的引用?如何從低級別的屬性中獲取引用到C#中同一類中的某些頂級屬性?
是的..讓我們來想象一下,它有一些具有10級層次的類。我需要在某個時刻從第10級獲得第3級的某個屬性。並改變它。讓我們設想一些down-level屬性是一個Timer,它自己做一些事情並且需要這個訪問。
可以嗎?
感謝您的任何線索!
更新: 事實上,我們可以做一些外部對象,將做好這項工作......但這個想法是保持類的所有邏輯的內...
如何獲取從低級別的屬性到C#中同一類中的某些頂級屬性的引用?如何從低級別的屬性中獲取引用到C#中同一類中的某些頂級屬性?
是的..讓我們來想象一下,它有一些具有10級層次的類。我需要在某個時刻從第10級獲得第3級的某個屬性。並改變它。讓我們設想一些down-level屬性是一個Timer,它自己做一些事情並且需要這個訪問。
可以嗎?
感謝您的任何線索!
更新: 事實上,我們可以做一些外部對象,將做好這項工作......但這個想法是保持類的所有邏輯的內...
好吧,我不知道是什麼類層次結構需要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();
}
}
希望這有助於
嗨!看來這就是我要求的!謝謝! –
10級繼承?哎呀!如何寧願構圖而不是繼承? –
嗨!感謝您的輸入......是的......我有一個非常複雜的課程。我不想創建任何外部管理器來更改某些類屬性。代替它,我想在類的某個級別內實現這個管理器(讀定時器)。這就是爲什麼我需要從Timer事件訪問類的某些頂級屬性。 –
您不能更改屬性,它們會在編譯時烘焙到程序集元數據中。避免通過添加更多圖層來解決複雜性。 –