Menu
CoddyTech

表达式主体成员

本课属于 Coddy C# 学习旅程的“面向对象编程”单元。第 14 课,共 70 课。

表达式体成员为只包含单个表达式的成员提供了简洁的语法。你可以使用 => 箭头语法,而不必用大括号编写完整的方法体或属性体。

对于只返回一个表达式的方法,你可以替换整个方法体:

// 传统方法
public int Add(int a, int b)
{
    return a + b;
}

// 表达式体方法
public int Add(int a, int b) => a + b;

这种语法也适用于只读属性,你之前已经简单见过:

public class Circle
{
    public double Radius { get; set; }
    public double Area => Math.PI * Radius * Radius;
    public double Circumference => 2 * Math.PI * Radius;
}

你也可以分别为属性的获取器和设置器使用表达式体:

private string name;
public string Name
{
    get => name;
    set => name = value.Trim();
}

即使构造函数只包含一条语句,也可以使用这种语法:

public class Person
{
    public string Name { get; }
    public Person(string name) => Name = name;
}

当逻辑简单时,表达式主体成员可以让代码更易读。对于简单的操作,可以使用它们;如果需要多条语句或复杂逻辑,则应使用传统的方法体。

challenge icon

挑战

简单

让我们来构建一个产品价格计算器,展示如何使用表达式体成员编写简洁清晰的代码。

你将创建两个文件来组织代码:

  • Product.cs:在 Store 命名空间中定义一个 Product 类。这个类应展示多种表达式体成员:
    • 自动实现的 Name(字符串)属性和 BasePrice(十进制数)属性
    • 一个同时设置这两个属性的表达式体构造函数
    • 一个表达式体只读属性 TaxAmount,用于计算基础价格的 10%
    • 一个表达式体只读属性 TotalPrice,返回基础价格加税额
    • 一个表达式体方法 GetDiscount(decimal percentage),返回折扣金额(基础价格乘以百分比,再除以 100)
    • 一个表达式体方法 GetFinalPrice(decimal discountPercentage),返回总价减去折扣
  • Program.cs:在主文件中,使用输入值创建一个 Product,然后显示它的价格明细。

你将收到三个输入值:

  • 产品名称
  • 基础价格
  • 要应用的折扣百分比

请按以下格式打印价格明细:

Product: {Name}
Base Price: {BasePrice}
Tax (10%): {TaxAmount}
Total Price: {TotalPrice}
Discount ({percentage}%): {discountAmount}
Final Price: {finalPrice}

例如,如果输入值是 Laptop、1000 和 15,输出应为:

Product: Laptop
Base Price: 1000.00
Tax (10%): 100.00
Total Price: 1100.00
Discount (15%): 150.00
Final Price: 950.00

请将每个金额格式化为恰好两位小数,例如 value.ToString("F2") 或 $"{value:F2}"。这同样适用于基础价格、税额、总价、折扣和最终价格。

记得对所有只包含一个表达式的成员使用 => 箭头语法。这样可以让代码保持简洁易读!

亲手试试

using System;
using Store;

class Program
{
    public static void Main(string[] args)
    {
        // 读取输入
        string name = Console.ReadLine();
        decimal basePrice = Convert.ToDecimal(Console.ReadLine());
        decimal discountPercentage = Convert.ToDecimal(Console.ReadLine());

        // 使用输入值创建 Product 对象
        Product product = new Product(name, basePrice);

        // 使用 GetDiscount 方法计算折扣金额
        decimal discountAmount = product.GetDiscount(discountPercentage);

        // 使用 GetFinalPrice 方法计算最终价格
        decimal finalPrice = product.GetFinalPrice(discountPercentage);

        // 按要求的格式输出价格明细:
        Console.WriteLine($"Product: {product.Name}");
        Console.WriteLine($"Base Price: {product.BasePrice:F2}");
        Console.WriteLine($"Tax (10%): {product.TaxAmount:F2}");
        Console.WriteLine($"Total Price: {product.TotalPrice:F2}");
        Console.WriteLine($"Discount ({discountPercentage}%): {discountAmount:F2}");
        Console.WriteLine($"Final Price: {finalPrice:F2}");
    }
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: C# 在线编译器