【发布时间】:2010-10-21 16:19:51
【问题描述】:
我看到的 LOD 描述(例如,Wikipedia、C2 Wiki)谈到不调用方法。引用维基百科:
函数的得墨忒耳定律要求对象 O 的方法 M 只能调用以下类型对象的方法:
- O 本身
- M的参数
- 在 M
中创建/实例化的任何对象 - O 的直接组件对象
- 一个全局变量,可以被 O 访问,在 M 的范围内
但是访问属性、变量或枚举呢?例如,鉴于此:
class FirstClass {
public SecondClass GetRelatedClass() {
return new SecondClass();
}
public enum InnerEnum {
Violated,
NotViolated
}
}
class SecondClass {
public int Property {get; set;}
public string _variable = "Danny Demeter";
}
是否有任何/所有这些 LOD 违规? (如果可以的话,暂时忽略直接变量访问..)
void Violate(FirstClass first) {
SecondClass second = first.GetRelatedClass();
var x = second.Property;
var y = second._variable;
var z = FirstClass.InnerEnum.Violated;
}
我不会做前两个(无论是否“官方”违规),但对枚举不太确定。
【问题讨论】:
标签: c# oop law-of-demeter