VR引擎开发0201

111 阅读2分钟

十四、面向对象

类的定义

创建一个类

    public class Student
    {
        //构造函数

        //字段
        public string Name;
        public int age;
        //属性

        //方法
        public void Show()
        {
            Console.WriteLine("我叫{0},今年{1}",Name, age);
        }
    }

声明类,传参,调用方法

            Student student1;//声明了一个student 类
            student1 = new Student();//创建了一个student1对象
            student1.Name = "xiaoming";
            student1.age = 13;
            student1.Show();

构造函数

构造函数会在类构造对象的时候自动调用自己,我们一般用于初始化对象存储的数据,所以构造函数本质是用于初始化数据的函数。

说白了,就是给创建的对象赋一定要赋的值。

   public class  Vehicle
    {
        //构造函数,创建对象的时候会初始化,这时候会调用构造函数
        // 构造函数名字一定要和类名一样
          public  Vehicle(int Speed1,int MaxSpeed2,int Weight3,int id)
        {
            this.speed = Speed1;//this指向当前创建的对象
            this.MaxSpeed = MaxSpeed2;
            this.Weight=Weight3;
            this.id1 = id;
        }

        public int speed;
        public int MaxSpeed;
        public int Weight;
        private int id1;// 私有的变量,只能在类内部使用
        private int id2=2;// 私有的变量,只能在类内部使用

        //属性 基本结构
        public int num
        {
            get
            {//当我去访问num值的时候,num的值由get的返回值决定
                Console.WriteLine("访问的时候会执行");
                if (id1 * id2 == 5) return 3 ;
                return id1*id2;
            }
            set
            {//当我去修改num的值的时候会执行set块中的代码,set会拿到最新的值
                id1 = value;
                Console.WriteLine("修改的时候会执行得到新的值value为{0}", value);

            }
        }

        public int num2 { get; set; }//作用和字段类似


        public void Run()
        {
            Console.Write("以{0}行驶,最大速度{1}", speed, MaxSpeed);
        }
        public void Stop()
        {

        }
    }

创建一个车对象 使用的是am2中的类

           
            Vehicle car;
            car = new Vehicle(20, 300, 2, 11011);
            car.Run();
              Console.WriteLine(car.num);
            car.num = 3;
            car.num = 4;
            Console.WriteLine(car.num);

匿名类型

有时候不确定数据的类型

            var a = "asdf";//赋值的时候确定了变量的类型
            var b = 12;
            Console.WriteLine(a);
            Console.WriteLine(b);

类的继承

大类中有大家相同的字段,属性,方法,但细分却又有不同

创建一个基类(父类)

    class Hero
    {
        public Hero(string name,int life)
        {
            this.Name = name;
            this.life = life;
        }
        public string Name { get; set; }
        public int life;
        
        public virtual void move() //在基类中定义该方法为虚方法
        {
            Console.WriteLine(Name+"移动"+life);
        }
    }

创建一个派生类(子类)

   class Metroid:Hero  //c#中只支持单继承 要实现多继承使用接口
    {
        public Metroid(string name,int life,int attack):base(name,life)//把子类中的name和life值传入父类构造方法
        {
            this.attack = attack;
        }
        public int attack;
        public void shoot()
        {
            Console.WriteLine(base.Name+"射击");//可以调用父类(base)的属性,方法,字段
        }
        public override void move()//重写父类虚函数方法
        {
            base.move();//调用父类move方法,保留父类中的move方法,也可以删除
            Console.WriteLine("凤凰之舞");
        }

    }

测试

          Metroid sams = new Metroid("sams",799,10);
            sams.shoot();
            sams.move();
            Hero samsal = new Hero("samsal", 899);
            samsal.move();