2011-11-01 66 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

嗨!看来这就是我要求的!谢谢! –