C#-多态
2022/9/1 1:22:53
本文主要是介绍C#-多态,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
在派生类中重写基类的虚方法
虚方法的重写
public virtual void Move() { } public override void Move() { } class Vehicle { string name; //定义字段 public string Name //定义属性为字段赋值 { get { return name; } set { name = value; } } public virtual void Move() //定义方法输出交通工具的形态 { Console.WriteLine("{0}都可以移动", Name); } } class Train : Vehicle { public override void Move() //重写方法输出交通工具形态 { Console.WriteLine("{0}在铁轨上行驶", Name); } } class Car : Vehicle { public override void Move() //重写方法输出交通工具形态 { Console.WriteLine("{0}在公路上行驶", Name); } } class Program { static void Main(string[] args) { Vehicle vehicle = new Vehicle(); //创建Vehicle类的实例 Train train = new Train(); //创建Train类的实例 Car car = new Car(); //创建Car类的实例 //使用基类和派生类对象创建Vehicle类型数组 Vehicle[] vehicles = { vehicle, train, car }; vehicle.Name = "交通工具"; //设置交通工具的名字 train.Name = "火车"; //设置交通工具的名字 car.Name = "汽车"; //设置交通工具的名字 vehicles[0].Move(); //输出交通工具的形态 vehicles[1].Move(); //输出交通工具的形态 vehicles[2].Move(); //输出交通工具的形态 Console.ReadLine(); } }
抽象类与抽象方法
访问修饰符 abstract class 类名 : 基类或接口 { //类成员 public abstract void AbsMethod();//抽象方法 } public abstract class Market { public string Name { get; set; }//商场名称 public string Goods { get; set; }//商品名称 public abstract void Shop();//抽象方法,用来输出信息 } public class WallMarket : Market//继承抽象类 { public override void Shop()//重写抽象方法 { Console.WriteLine(Name + "购买" + Goods); } } public class TaobaoMarket : Market//继承抽象类 { public override void Shop()//重写抽象方法 { Console.WriteLine(Name + "购买" + Goods); } } class Program { static void Main(string[] args) { Market market = new WallMarket();//使用派生类对象创建抽象类对象 market.Name = "沃尔玛"; market.Goods = "七匹狼西服"; market.Shop(); market = new TaobaoMarket();//使用派生类对象创建抽象类对象 market.Name = "淘宝"; market.Goods = "韩都衣舍花裙"; market.Shop(); Console.ReadLine(); } }
抽象类不能直接实例化,不能被密封
接口的使用
修饰符 interface 接口名称 : 继承的接口列表 { 接口内容; }
接口只能定义,不能实例化,接口成员永远是公共的(前面要加public)。一个类可以继承多个接口。接口中不能有字段。
interface IPerson//定义IPerson接口 { string Name { get; set; }//姓名属性 int Age { get; set; }//年龄属性 void Speek();//说话行为 void Work();//工作行为 } class Student : IPerson//定义学生类,继承自IPerson接口 { public string Name { get; set; }//实现Name属性 private int age;//定义age字段,用来表示年龄 public int Age//实现Age属性 { get { return age; } set { if (age > 0 && age < 120)//控制输入范围 { age = value; } } } public void Speek()//实现Speek方法 { Console.WriteLine(Name + ":老师好"); } public void Work()//实现Work方法 { Console.WriteLine(Name + "同学开始记笔记"); } } class Teacher : IPerson//定义老师类,继承自IPerson接口 { public string Name { get; set; }//实现Name属性 private int age;//定义age字段,用来表示年龄 public int Age//实现Age属性 { get { return age; } set { if (age > 0 && age < 120)//控制输入范围 { age = value; } } } public void Speek()//实现Speek方法 { Console.WriteLine(Name + ":同学们好"); } public void Work()//实现Work方法 { Console.WriteLine(Name + "老师开始上课"); } } class Program { static void Main(string[] args) { //使用派生类对象创建接口数组 IPerson[] person = new IPerson[] { new Student(), new Teacher() }; person[0].Name = "peter";//为学生姓名赋值 person[0].Age = 20;//为学生年龄赋值 person[1].Name = "mike";//为老师姓名赋值 person[1].Age = 40;//为老师年龄赋值 person[0].Speek();//学生的说话行为 person[1].Speek();//老师的说话行为 Console.WriteLine();//换行 person[1].Work();//老师的工作行为 person[0].Work();//学生的工作行为 Console.ReadLine(); } }
这篇关于C#-多态的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#