轨道
/
C#
C#
/
练习
/
称重机
称重机

称重机

学习练习

简介

属性

C# 中的属性是类的一个成员,用于访问该类内部的数据。调用方可以设置或获取(get)数据。属性既可以是自动实现的,也可以带有后备字段。属性由一个 set 访问器和一个/或一个 get 访问器组成。在其他一些语言中,“修改器”大致相当于 set 访问器,“访问器”大致相当于 get 访问器,不过语法的构成完全不同。

设置属性时,可以对输入值进行验证、格式化或以其他方式处理,实际上,只要类中的代码能够访问,任何程序化操作都可以执行。

同样,获取属性时,也可以对数据进行计算或格式化,同样可以执行类所能使用的任何程序化操作。

属性和其他类成员一样拥有访问修饰符(public、private 等),但 set 访问器可以拥有独立于获取(get)访问器的访问级别,反之亦然。属性不必同时拥有两个访问器,它可以只有一个(get 或 set)。

表达属性的基本语法有两种形式:

基于字段或表达式的属性:

private int myField;
public int MyProperty
{
    get { return myField; }
    set { myField = value; }
}

自动实现的属性

public int MyProperty { get; private set; } = 42;

初始化是可选的。

说明

在本练习中,你将为一台以千克为单位的称重机建模。

共有 6 个任务,每个任务都需要实现一个或多个属性:

1. 让称重机可以设置精度

为了满足不同的需求,我们允许每台称重机自定义精度(小数点后的位数)。 实现WeighingMachine类,使其具有一个只读的Precision属性,该属性由构造函数的precision参数设定:

var wm = new WeighingMachine(precision: 3);

//  => wm.Precision == 3

2. 让称重机可以设置重量

实现WeighingMachine.Weight属性,让重量可以被读取和设置:

var wm = new WeighingMachine(precision: 3);
wm.Weight = 60.5;

//  => wm.Weight == 60.5

3. 确保拒绝负的输入重量

显然,一个人的重量不可能是负数。 为WeighingMachine.Weight属性添加校验,在尝试将其设为负数时抛出ArgumentOutOfRangeException:

var wm = new WeighingMachine(precision: 3);
wm.Weight = -10; // Throws an ArgumentOutOfRangeException

4. 允许对称重机进行皮重调整

皮重调整可以是任意值(甚至是负数,或是会让显示重量变成负数的值) 实现WeighingMachine.TareAdjustment属性,以便可以设置皮重调整:

var wm = new WeighingMachine(precision: 3);
wm.TareAdjustment = -10.6;

// => wm.TareAdjustment == -10.6

5. 确保称重机有默认的皮重调整

经过一番仔细测试后发现,由于制造问题,所有称重机都倾向于把重量高估5。 将WeighingMachine.TareAdjustment属性的默认值改为5。

var wm = new WeighingMachine(precision: 3);

// => wm.TareAdjustment == 5.0

6. 让重量可以被获取

实现WeighingMachine.DisplayWeight属性,它应返回一个字符串,显示应用皮重调整后的重量,同时保留正确的精度,并加上单位。 注意: display-weight = input-weight - tare-adjustment

var wm = new WeighingMachine(precision: 3);
wm.Weight = 60.567;
wm.TareAdjustment = 10;

// => wm.DisplayWeight == "50.567 kg"
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
C# Exercism

准备好开始 称重机 了吗?

注册 Exercism,借助 62 个概念178 个练习 和真人导师指导,学习并掌握 C#,全部免费。