C#程序开发求助:自动属性、ToString重写及子类集成问题
C# 挂号信子类实现问题解决方案
需求回顾
- 创建
LetterDemo类,用于实例化Letter和CertifiedLetter对象 Letter类包含收件人姓名、邮寄日期的自动实现属性Letter重写ToString()方法,返回含类名(通过GetType()获取)及字段值的字符串- 创建
CertifiedLetter子类,包含存储追踪号的自动实现属性(用户选择挂号信时生成/提供该编号)
原代码问题分析
- 子类拼写错误:
CertfiedLetter应为CertifiedLetter - 追踪号设计错误:做成静态方法,无法绑定到具体挂号信对象,不符合「存储追踪号」的属性要求
- Main方法未正确创建
CertifiedLetter实例,也未处理追踪号赋值 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}"; } } }
关键说明
- 子类属性继承:
CertifiedLetter继承自Letter,自动拥有Name和DateMailed属性,无需重复定义 - 追踪号设计:改为实例属性
TrackingNumber,每个挂号信对象拥有独立追踪号,支持自动生成或用户输入 - 多态使用:用父类
Letter类型变量存储子类实例,调用ToString()时自动执行对应子类的重写方法 - 代码复用:子类
ToString()调用base.ToString()复用父类字符串逻辑,仅追加追踪号信息 - 输入验证优化:增加循环验证,确保用户输入有效指令
内容的提问来源于stack exchange,提问作者gabbi368
相关产品推荐
相关产品推荐

