c#编写一个控制台程序,在该程序中构造一个Person基类,再分别构造Student和Teacher派生类,要求具有不同的特征和行为,能通过静态成员自动记录由不同派生类创建的对象的人数。
时间: 2024-03-14 09:47:31 浏览: 72
好的,下面是C#版本的代码实现。
首先,我们定义一个Person基类:
```csharp
using System;
class Person {
private string name;
private int age;
private static int count = 0;
public Person(string name, int age) {
this.name = name;
this.age = age;
count++;
}
public virtual void Show() {
Console.WriteLine("Name: " + name);
Console.WriteLine("Age: " + age);
}
~Person() {
count--;
}
public static int GetCount() {
return count;
}
}
```
在Person类中,我们同样定义了一个静态成员变量count,用于记录由不同派生类创建的对象的人数。在构造函数中,我们将count加1,代表创建了一个新的对象。在析构函数中,我们将count减1,代表销毁了一个对象。同时,我们还定义了一个静态成员函数GetCount,用于获取count的值。
接下来,我们分别定义两个派生类Student和Teacher:
```csharp
class Student : Person {
private int score;
private static int count = 0;
public Student(string name, int age, int score) : base(name, age) {
this.score = score;
count++;
}
public override void Show() {
base.Show();
Console.WriteLine("Score: " + score);
}
~Student() {
count--;
}
public static int GetCount() {
return count;
}
}
class Teacher : Person {
private string title;
private static int count = 0;
public Teacher(string name, int age, string title) : base(name, age) {
this.title = title;
count++;
}
public override void Show() {
base.Show();
Console.WriteLine("Title: " + title);
}
~Teacher() {
count--;
}
public static int GetCount() {
return count;
}
}
```
在Student和Teacher类中,我们同样定义了一个静态成员变量count,用于记录由不同派生类创建的对象的人数。在构造函数和析构函数中,同样需要将count加1和减1。
最后,我们编写一个控制台程序测试一下:
```csharp
class Program {
static void Main(string[] args) {
Person p1 = new Student("张三", 18, 90);
Person p2 = new Teacher("李四", 35, "教授");
p1.Show();
p2.Show();
Console.WriteLine("Person count: " + Person.GetCount());
Console.WriteLine("Student count: " + Student.GetCount());
Console.WriteLine("Teacher count: " + Teacher.GetCount());
p1 = null;
p2 = null;
GC.Collect();
Console.WriteLine("Person count: " + Person.GetCount());
Console.WriteLine("Student count: " + Student.GetCount());
Console.WriteLine("Teacher count: " + Teacher.GetCount());
}
}
```
输出结果为:
```
Name: 张三
Age: 18
Score: 90
Name: 李四
Age: 35
Title: 教授
Person count: 2
Student count: 1
Teacher count: 1
Person count: 0
Student count: 0
Teacher count: 0
```
可以看到,我们成功地创建了一个Person基类和两个派生类Student和Teacher,并且能够通过静态成员自动记录由不同派生类创建的对象的人数。值得注意的是,在C#中,我们需要将p1和p2赋值为null,然后调用GC.Collect()进行垃圾回收,才能确保析构函数被调用。
阅读全文