我会尽量说清楚,但请耐心听我说. 我需要制作一个节目:

  1. 创建一个名为LetterDemo的类,它实例化两个类(名为Letter和认证Letter)的对象
  2. Letter类包括信件收件人姓名和邮寄日期的自动实现属性.
  3. 在Letter类中,还要创建一个ToString()方法,该方法覆盖Object类的ToString()方法,并返回一个包含类名称的字符串(使用GetType()和Letter的数据字段值).
  4. 创建一个名为CertifiedLetter的子类,该类包含一个自动实现的属性,该属性保存信件的跟踪编号.(我假设,如果用户表明信件是经过认证的,就会给出这一点.)

我已经弄明白了大部分,但我被卡在证书和跟踪号码部分了. 对如何使用子类并在其中集成方法的任何帮助都将是救命稻草.谢谢!

//using System.ComponentModel.Design;
using System.Data;
using System.Globalization;
using System.Runtime.CompilerServices;
using static System.Console;

class LetterDemo
{
    static void Main()
    {
        Letter newLetter = new Letter();

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

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

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

        if (isCertified.Length > 1)
        {
            WriteLine("Please enter only 'Y' or 'N' >> ");
        }
        else
        {
           // Send to CertifiedLetter
                }
        WriteLine(newLetter.ToString());

    }
    class Letter
    {
        private string name;
        private string dateMailed;
        public string Name { get; set; }
        public string DateMailed { get; set; }

        public override string ToString()
        {
              return GetType() + " is being sent to " + Name + " one the day of " + DateMailed + ".";
            
        }
    }
    class CertfiedLetter : Letter
    {
        public static int TrackingNumber()
        {
            Random rnd = new Random();
            int newNum = rnd.Next(1000, 9999);
            int trackingNumber = newNum;
            return trackingNumber;

        }
    }
}

推荐答案

  • 自动实现的属性:您已经正确地为Letter类中的Name和DateMailed实现了自动实现的属性.您将希望对CerfiedLetter类中的TrackingNumber执行类似的操作.

  • 认证信函类:认证信函应该继承自信函,并为跟踪编号添加一个额外的属性.TrackingNumber不应该是方法,而应该是属性.您可以在CerfiedLetter的构造函数中生成跟踪编号.

  • 处理认证信件:在Main方法中,当用户指示信件经过认证时,需要创建CertifiedLetter的实例.此实例还应该有一个名称和日期,以及跟踪编号.

  • CertifiedLetter中的ToString方法:重写CertifiedLetter中的ToString方法以包括有关跟踪编号的信息.

例如如下所示:

class LetterDemo
{
    static void Main()
    {
        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();

        Letter letter;

        if (isCertified.Equals("Y", StringComparison.OrdinalIgnoreCase))
        {
            letter = new CertifiedLetter
            {
                Name = inputName,
                DateMailed = inputDate
            };
        }
        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; }

    public CertifiedLetter()
    {
        Random rnd = new Random();
        TrackingNumber = rnd.Next(1000, 9999);
    }

    public override string ToString()
    {
        return base.ToString() + " The tracking number is " + TrackingNumber + ".";
    }
}

根据您的 comments 进行编辑:

您可以更直接地打印字母属性:

static void Main()
{
    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();

    if (isCertified.Equals("Y", StringComparison.OrdinalIgnoreCase))
    {
        // Create and display a CertifiedLetter
        CertifiedLetter certifiedLetter = new CertifiedLetter
        {
            Name = inputName,
            DateMailed = inputDate
        };
        WriteLine(certifiedLetter.ToString());
    }
    else
    {
        // Create and display a regular Letter
        Letter letter = new Letter
        {
            Name = inputName,
            DateMailed = inputDate
        };
        WriteLine(letter.ToString());
    }
}

Csharp相关问答推荐

Blazor:计算值或保留为默认值

AutoMapper -如何为两个不同的用例设置单个映射?

Microsoft. SQLServer. Types(106.1000.6)在try 从用户定义的类型检索值时引发异常

通过条件列表删除/更新EF Core 7中的实体的有效方法

在LINQ Where子句中使用新的DateTime

具有单一导航属性的EF核心一对多关系

为什么SignalR在每个Blazor服务器应用程序启动时最多启动8个服务器?

在路由中使用枚举

Rx.Net窗口内部可观测数据提前完成

在.NET MAUI.NET 8中如何防止按钮点击时出现灰色反馈

TagHelpers在新区域不起作用

try 链接被委派者(多播委托)时,无法将获取运算符应用于类型为';方法组&39;和方法组';的操作数

.NET 6:如何防止系统生成的日志(log)?

使用switch 类型模式时出现奇怪的编译器行为

如何在Akka.NET中重新启动执行元时清除邮箱

毛伊岛.NET 8图片不再适合按钮

ASP.NET核心中的授权,如何在DbContext启动之前提供租用ID

避免在特定区域中设置Visual Studio代码的自动格式

ASP.NET核心MVC|如何在控制器方法之间传递值

根据运行时值获取泛型类型的字典