C#基础制作属性原子
微软作为一个框架设计指南,properties应该彼此独立,而不是依赖于以任何特定的顺序设置.
假设你有一个需要支持缩小和面积计算的三角形类.你会怎么模拟这个? 这当然是被认为是设计,因为区域依赖于基础和高度首先设置: class Triangle{ public double Base {get;set;} public double Height {get;set;} public double Area { get{ return (Base * Height) / 2; } } } 假设你使用一个构造函数,你可以确保这种情况下的默认值,但这是正确的方法吗? class Triangle{ public Triangle(double b,double h){ Base = b; Height = h; } public double Base {get;set;} public double Height {get;set;} public double Area { get{ return (Base * Height) / 2; } } } 您仍然拥有一个依赖于其他属性的属性.为了成为纯粹主义者,我只能看到几种方法(我猜他们可以结合起来): >使Base / Height具有只能在构造函数中设置的只读成员 问题: >指导方针是否可行(您必须为您的课程建立大量复杂性才能支持)? 解决方法
微软真的试图说:“不要按照任意顺序调用属性会导致意外的行为来设计你的类.”你的类的用户不要求请求一个值(使用一个属性)具有尴尬的副作用.
这是最不奇怪的原则. 我认为这是一个完全实际的准则.属性不应有意想不到的副作用. 你提出了一个很好的问题:“你如何管理你的财产彼此独立?很小心!我尽可能地消除状态(并相应地减少属性的数量).另外,通过分类来分割状态是另外一种策略.这将是一个很好的问题自己… 对于三角形类,我认为您在代码中呈现的两种解决方案都是有效的.如果这取决于我,我将设计三角形,以便它是不可变的,并且在构造函数中占据宽度和高度. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |