如何获取从低级别的属性到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事件访问类的某些顶级属性。 –
您不能更改属性,它们会在编译时烘焙到程序集元数据中。避免通过添加更多图层来解决复杂性。 –