c#关于数组和多态的简单使用

本文介绍C#中ArrayList的使用方法及其与Array的区别,包括动态数组的创建与访问,并通过foreach遍历示例说明。同时讲解了类的继承与多态的应用,通过具体的代码示例展示了构造函数及方法的继承与复写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 数组的话可以用ArrayList,很好用,与Array不同的是,数组的大小可以随意改变,像是动态的数组,Add等方法什么的,可以直接用,然后foreach配合方便访问。
具体使用:可以先不定义类型,拆包的时候再进行判断。
ArrayList P=new ArrayList();      //定义P数组
P.Add(num);   //调用Add方法
就这样。

2 foreach使用也比较简单,具体使用看实例:

ArrayList P = new ArrayList();   //定义数组

Pupil p = new Pupil(textBox1.Text, textBox2.Text, textBox3.Text, textBox4.Text);  //使用          
P.Add(p);    //调用数组方法,进行装包

 foreach (Pupil a in P)   //数组元素的访问(拆包)
            {
                label5.Text += "\n" + a.Show();
            }


3 注意要先引用using System.Collections;才可以使用数组


4 接下来是多态与类的继承
然后构造函数的继承,:base(name,age)
方法的继承,base.show();复写override,虚方法virtual
具体在实验中:

 public class Student    //基类
    {
        protected string name;
        protected string age;
        protected string school;
        protected string grade;
        int studentnum=0;
        public Student(string name, string school, string age, string grade)   //构造函数
        {
            this.name = name;
            this.school = school;
            this.age = age;
            this.grade = grade;
        }
        public virtual string Show()   //虚方法
        {
            return string.Format("我的名字是{0},我来自{1},年龄是{2},我的成绩是{3}", name,school,age,grade);
        }
        public virtual int  Studentnum(){
            return studentnum;
        }
    }
    public class Pupil:Student               //派生类的继承
    {
        public Pupil(string name,string age,string school,string grade) : base(grade,-,-,-) { } //构造函数的继承
        public override string Show()       //方法的复写
        {
            return base.Show()+"  我是小学生\n";     //基类方法内容的部分继承
        }
    }
  

第一篇博客,完全自娱自乐,肯定有许多问题,但是也是希望能够帮助有问题的人,如有大神出没,也请多多指教。
<think>好的,我现在需要回答用户关于C#中继承多态示例代码的请求。首先,用户引用了三个站内资料,都涉及多态、继承以及它们的实现方式,比如虚方法、抽象类接口。用户希望看到具体的代码示例,所以我得结合这些概念来构造示例。 首先,我应该明确继承多态的基本概念。继承允许一个类继承另一个类的属性方法,而多态则让子类可以重写这些方法,实现不同的行为。根据引用[1][2],多态C#中可以通过虚方法、抽象类接口来实现。引用[3]还提到多态的优势,比如灵活性可扩展性,这些应该在示例中体现出来。 接下来,我需要设计几个示例来覆盖不同的实现方式。可能的结构是:首先展示一个基础的继承例子,然后引入虚方法的重写,接着是抽象类,最后是接口。这样用户可以逐步理解不同层次的实现。 对于继承的示例,可以创建一个基类Animal,然后派生类DogCat。基类中有个MakeSound方法,使用虚方法让子类重写。这样在调用时,根据对象的实际类型执行不同的方法,体现多态。 然后,可以引入抽象类的例子,比如Shape抽象类,包含抽象方法CalculateArea,让子类CircleRectangle实现。这样展示抽象类如何强制子类实现特定方法,同时通过多态调用。 接下来是接口的例子,定义一个IWorker接口,包含Work方法,由EmployeeRobot类实现。这样可以展示接口如何实现多态,不同的类实现相同接口但行为不同。 在代码示例中,要确保语法正确,比如使用virtual、override关键字,抽象类接口的定义。同时,Main函数中创建对象并调用方法,展示多态的效果,比如将子类对象存储在基类或接口类型的变量中,调用方法时执行子类的实现。 还需要考虑用户可能的疑问,比如虚方法抽象方法的区别,接口抽象类的适用场景。因此,在解释部分需要简要说明这些点,帮助用户理解不同实现方式的适用情况。 最后,生成相关问题,引导用户深入思考,比如性能优化、设计模式应用等,这些问题应该与示例中的内容相关,并参考提供的引用资料。 现在检查代码是否正确:Animal基类的MakeSound标记为virtual,DogCat重写它;Shape是抽象类,有抽象方法;接口IWorker正确声明,实现类正确。Main函数中的调用是否展示了多态,比如将子类对象赋给基类数组,循环调用方法,确保输出不同的结果。 确保代码符合C#语法,比如分号、大括号,类方法定义正确。同时,注释要简洁,解释关键点,如“// 多态调用”来突出多态的应用。 总结:通过分步骤的代码示例,覆盖继承、虚方法、抽象类接口,展示多态的不同实现方式,并结合引用资料中的概念,确保回答准确且有帮助。</think>以下是一个结合C#继承与多态特性的代码示例,包含虚方法、抽象类接口三种实现方式: ### 1. 基础继承与虚方法多态 ```csharp // 基类 public class Animal { public virtual void MakeSound() { Console.WriteLine("动物发出声音"); } } // 子类继承实现 public class Dog : Animal { public override void MakeSound() { Console.WriteLine("汪汪汪!"); } } public class Cat : Animal { public override void MakeSound() { Console.WriteLine("喵喵喵!"); } } // 使用示例 Animal[] animals = new Animal[] { new Dog(), new Cat() }; foreach (var animal in animals) { animal.MakeSound(); // 多态调用[^2] } ``` ### 2. 抽象类实现多态 ```csharp abstract class Shape { public abstract double CalculateArea(); // 抽象方法强制实现[^3] } class Circle : Shape { public double Radius { get; set; } public override double CalculateArea() { return Math.PI * Radius * Radius; } } class Rectangle : Shape { public double Width { get; set; } public double Height { get; set; } public override double CalculateArea() { return Width * Height; } } // 使用示例 Shape shape1 = new Circle { Radius = 5 }; Shape shape2 = new Rectangle { Width = 4, Height = 6 }; Console.WriteLine($"圆形面积: {shape1.CalculateArea()}"); Console.WriteLine($"矩形面积: {shape2.CalculateArea()}"); ``` ### 3. 接口多态实现 ```csharp interface IWorker { void Work(); // 接口定义契约[^1] } class Employee : IWorker { public void Work() { Console.WriteLine("员工在办公"); } } class Robot : IWorker { public void Work() { Console.WriteLine("机器人在生产"); } } // 使用示例 List<IWorker> workers = new List<IWorker> { new Employee(), new Robot() }; foreach (var worker in workers) { worker.Work(); // 统一接口调用 } ``` **关键特性说明:** 1. 虚方法(`virtual/override`):允许子类重写父类方法实现 2. 抽象类(`abstract`):强制子类实现特定方法,无法实例化 3. 接口(`interface`):定义行为契约,支持多重实现 4. 多态调用:通过基类/接口引用访问具体实现[^2]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值