c#编写一个控制台程序,在该程序中构造一个Person基类,再分别构造Student和Teacher派生类,要求具有不同的特征和行为,能通过静态成员自动记录由不同派生类创建的对象的人数。、
时间: 2024-03-14 22:47:40 浏览: 57
C#编写的控制台程序
好的,这是一个比较典型的面向对象的继承实例,以下是代码实现:
```csharp
using System;
class Person
{
// 静态成员记录创建的Person对象的数量
private static int count = 0;
protected string name;
protected int age;
public Person(string name, int age)
{
this.name = name;
this.age = age;
count++;
}
public virtual void ShowInfo()
{
Console.WriteLine("Name: {0} Age: {1}", name, age);
}
public static void ShowCount()
{
Console.WriteLine("Total number of Person objects: {0}", count);
}
}
class Student : Person
{
private string major;
public Student(string name, int age, string major) : base(name, age)
{
this.major = major;
}
public override void ShowInfo()
{
base.ShowInfo();
Console.WriteLine("Major: {0}", major);
}
}
class Teacher : Person
{
private string subject;
public Teacher(string name, int age, string subject) : base(name, age)
{
this.subject = subject;
}
public override void ShowInfo()
{
base.ShowInfo();
Console.WriteLine("Subject: {0}", subject);
}
}
class Program
{
static void Main(string[] args)
{
Person p1 = new Person("Tom", 20);
Student s1 = new Student("Jack", 18, "Computer Science");
Teacher t1 = new Teacher("Mary", 35, "Math");
p1.ShowInfo();
s1.ShowInfo();
t1.ShowInfo();
Person.ShowCount();
}
}
```
在该程序中,我们首先定义了一个 Person 基类,其中包含了 name 和 age 两个基本属性,还有一个静态成员 count 用于记录创建的 Person 对象数量。我们还定义了一个 ShowInfo 方法,用于显示对象的信息,可以在派生类中进行重写。
然后,我们定义了 Student 和 Teacher 两个派生类,分别添加了 major 和 subject 属性,并在构造函数中调用了基类的构造函数。
最后,在 Main 函数中创建了一个 Person 对象、一个 Student 对象和一个 Teacher 对象,并调用了它们的 ShowInfo 方法,同时也调用了 Person 类的静态成员 ShowCount 方法,用于显示创建的 Person 对象数量。
总的来说,这段代码演示了如何通过基类和派生类的概念来实现代码的复用性和可维护性,同时也体现了面向对象编程的核心思想。
阅读全文