gpt4 book ai didi

c# - 得墨忒耳法则只适用于方法吗?

转载 作者:太空狗 更新时间:2023-10-29 23:03:46 24 4
gpt4 key购买 nike

我看到的 LOD 描述(例如 WikipediaC2 Wiki )谈论不调用方法。引用维基百科:

The Law of Demeter for functions requires that a method M of an object O may only invoke the methods of the following kinds of objects:
- O itself
- M's parameters
- any objects created/instantiated within M
- O's direct component objects
- a global variable, accessible by O, in the scope of 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;
}

我不会做前两个(无论是否“官方”违规),尽管对枚举不太确定。

最佳答案

我无法回答枚举问题——我似乎记得标准建议是不要在类内部定义枚举。

对于属性,您实际上可以将属性视为方法(getProperty()setProperty(value))的快捷方式。在这种情况下,您的答案是属性访问是违规行为。

对于字段(变量),再一次,通常的做法是不公开它们而是使用属性,真正公开字段是违反封装的。

但最终,Demeter 法则的目的是限制类之间实现的知识。对我来说,这意味着您的所有示例都是违规行为。

关于c# - 得墨忒耳法则只适用于方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3989629/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com