加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#基础制作属性原子

发布时间:2020-12-15 06:26:31 所属栏目:百科 来源:网络整理
导读:微软作为一个框架设计指南,properties应该彼此独立,而不是依赖于以任何特定的顺序设置. 假设你有一个需要支持缩小和面积计算的三角形类.你会怎么模拟这个? 这当然是被认为是设计,因为区域依赖于基础和高度首先设置: class Triangle{ public double Base {g
微软作为一个框架设计指南,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具有只能在构造函数中设置的只读成员
>使区域计算成一个方法.
>使用某种工厂模式只读成员来确保尽管可能存在依赖关系,但这些值只能通过实例化Triangle类的方法来设置.

问题:

>指导方针是否可行(您必须为您的课程建立大量复杂性才能支持)?
[例如,SqlConnection类允许您初始化连接字符串属性,但允许您更改其各个部分,如命令超时]
>如何管理您的属性彼此独立?
>对于使用Silverlight / MVVM类型体系结构的用户,您是否接受属性中的依赖关系,因为数据绑定对象的作用方式?例如,绑定在屏幕上显示高度,基数和面积的三角形实例.

解决方法

微软真的试图说:“不要按照任意顺序调用属性会导致意外的行为来设计你的类.”你的类的用户不要求请求一个值(使用一个属性)具有尴尬的副作用.

这是最不奇怪的原则.

我认为这是一个完全实际的准则.属性不应有意想不到的副作用.

你提出了一个很好的问题:“你如何管理你的财产彼此独立?很小心!我尽可能地消除状态(并相应地减少属性的数量).另外,通过分类来分割状态是另外一种策略.这将是一个很好的问题自己…

对于三角形类,我认为您在代码中呈现的两种解决方案都是有效的.如果这取决于我,我将设计三角形,以便它是不可变的,并且在构造函数中占据宽度和高度.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读