You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#程序开发求助:自动属性、ToString重写及子类集成问题

C# 挂号信子类实现问题解决方案

需求回顾

  • 创建LetterDemo类,用于实例化Letter和CertifiedLetter对象
  • Letter类包含收件人姓名、邮寄日期的自动实现属性
  • Letter重写ToString()方法,返回含类名(通过GetType()获取)及字段值的字符串
  • 创建CertifiedLetter子类,包含存储追踪号的自动实现属性(用户选择挂号信时生成/提供该编号)

原代码问题分析

  1. 子类拼写错误:CertfiedLetter应为CertifiedLetter
  2. 追踪号设计错误:做成静态方法,无法绑定到具体挂号信对象,不符合「存储追踪号」的属性要求
  3. Main方法未正确创建CertifiedLetter实例,也未处理追踪号赋值
  4. CertifiedLetter未重写ToString(),无法展示追踪号信息

修正后的完整代码

using static System.Console;

class LetterDemo
{
    static void Main()
    {
        Letter letter;

        WriteLine("Please enter name of recipient >> ");
        string inputName = ReadLine();

        WriteLine("Please enter the date letter was mailed >> ");
        string inputDate = ReadLine();

        WriteLine("Is letter certified? Y or N >> ");
        string isCertified = ReadLine().Trim().ToUpper();

        // 输入循环验证
        while (isCertified != "Y" && isCertified != "N")
        {
            WriteLine("Invalid input! Please enter only 'Y' or 'N' >> ");
            isCertified = ReadLine().Trim().ToUpper();
        }

        if (isCertified == "Y")
        {
            CertifiedLetter certifiedLetter = new CertifiedLetter();
            certifiedLetter.Name = inputName;
            certifiedLetter.DateMailed = inputDate;
            // 自动生成6位追踪号,也可改为用户输入逻辑
            certifiedLetter.TrackingNumber = new Random().Next(100000, 999999);
            letter = certifiedLetter;
        }
        else
        {
            letter = new Letter
            {
                Name = inputName,
                DateMailed = inputDate
            };
        }

        WriteLine(letter.ToString());
    }

    class Letter
    {
        // 自动实现属性,无需手动定义私有字段
        public string Name { get; set; }
        public string DateMailed { get; set; }

        public override string ToString()
        {
            return $"{GetType().Name} is being sent to {Name} on the day of {DateMailed}.";
        }
    }

    class CertifiedLetter : Letter
    {
        // 追踪号自动实现属性
        public int TrackingNumber { get; set; }

        // 重写ToString,追加追踪号信息
        public override string ToString()
        {
            return $"{base.ToString()} Tracking Number: {TrackingNumber}";
        }
    }
}

关键说明

  1. 子类属性继承:CertifiedLetter继承自Letter,自动拥有Name和DateMailed属性,无需重复定义
  2. 追踪号设计:改为实例属性TrackingNumber,每个挂号信对象拥有独立追踪号,支持自动生成或用户输入
  3. 多态使用:用父类Letter类型变量存储子类实例,调用ToString()时自动执行对应子类的重写方法
  4. 代码复用:子类ToString()调用base.ToString()复用父类字符串逻辑,仅追加追踪号信息
  5. 输入验证优化:增加循环验证,确保用户输入有效指令

内容的提问来源于stack exchange,提问作者gabbi368

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 19:16:27