c#学习委托、面向对象

mac2022-06-30  120

一、委托

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Project2 { //定义一个委托跟函数差不多,区别在于 //1.定义一个委托需要加上delegate关键字 //2.委托的定义不需要函数体 //3.委托:指向一个函数 public delegate double MyDelegate(double param1, double param2); class 委托{ static double Multiply(double param1,double param2) { return param1 * param2; } static double Divide(double param1,double param2) { return param1 / param2; } static void Main() { MyDelegate de;//利用我们定义的委托类型声明了一个新变量 de = Multiply;//当我们给一个委托的变量类型赋值的时候,返回值跟参数列表必须一样,否则无法赋值 Console.WriteLine(de(2.0,34.1)); de = Divide; Console.WriteLine(de(2.0,34.1)); Console.Read(); } } }

二、面向对象

有五个类:分别是Boss、Enemy、Program、Type1Enemy、Type2Enemy

Boss:

namespace _054_函数的递归调用 { class Boss:Enemy { //public override void Move()//重写,原来的方法不在了 //{ // Console.WriteLine("这是Boss的移动方法"); //} public new void Move()//当子类里面有一个签名于父类相同的方法的时候,就会把父类中的方法隐藏 {//隐藏只是把父类中的方法隐藏看不到,实际还存在 Console.WriteLine("这是Boss的移动方法"); } public void Attack() { AI(); Move(); HP = 100;//父类里面公有的数据和函数成员蔡可以在子类里面访问 Console.WriteLine("Boss正在进行攻击"); } } }

Enemy:

namespace _054_函数的递归调用 { class Enemy { private float hp; private float speed; public float HP { get { return hp; } set { hp = value; } } public float Speed { get { return speed; } set { speed = value; } } public void AI() { //Move(); Console.WriteLine("这里是Enemy1的公有AI方法"); } //public virtual void Move() //{ // Console.WriteLine("这里是Enemy1的公有Move方法"); //} public void Move() { Console.WriteLine("这里是Enemy1的公有Move方法"); } } }

Program:

namespace _054_函数的递归调用 { class Program { static void Main() { //Boss boss = new Boss(); //boss.AI();//继承:父类里面所有的数据成员和函数成员都会继承到子类里面 //boss.Attack(); //Enemy enemy; //enemy=new Boss();//父类声明的对象,可以由子类去构造 子类声明的对象不可以用父类去构造 //enemy虽然使用弗雷进行了声明,但是使用了子类构造,所以本质上是一个子类类型,我们可以强制类型转换 //Boss boss = (Boss)enemy; //boss.Attack(); // Enemy enemy = new Enemy(); //Boss boss = (Boss)enemy;//一个对象是什么类型的 主要看它是通过声明构造的 这里enemy使用了父类的构造函数,所以只有父类的字段可以强制转换 //Boss boss = new Boss(); //boss.Attack(); //boss.AI();//重写虚函数后,不管在哪里调用,都调用的是重写后的函数 //Enemy enemy = new Enemy(); //enemy.AI(); Enemy boss = new Boss(); boss.Move();//隐藏方法:如果使用子类声明的对象,调用隐藏方法会调用子类的如果使用父类声明,就会调用父类的 Console.Read(); } } }

Type1Enemy

namespace _054_函数的递归调用 { class Type1Enemy:Enemy { } }

Type2Enemy

namespace _054_函数的递归调用 { class Type2Enemy:Enemy { } }
最新回复(0)