VR引擎10.11

93 阅读5分钟
/*namespace demo_10_11
{
    internal class Program
    {
        enum State 
        {
            zaixian,xiaxian,mangxian,yinshen
        }
        struct Student
        {
            public string Name;
            public int id;
        }
 struct Student
        {
            public string Name;
            public int id;
            public int num;
        }
        static void Main(string[] args)
        {*/
//枚举类型
/* State state1 = State.zaixian;

## //1、遍历枚举类型中的名字
          foreach(string name in Enum.GetNames(typeof(State)))
          {
              Console.WriteLine(name);    
          }
## //2、遍历枚举类型中的值
          foreach (int num in Enum.GetValues(typeof(State)))
          {
              Console.WriteLine(num);
          }
## //3、结构体 多种数据类型组合,某一类信息比如人的集合
          Student student1;
          Student.name = "小明";
          student1.id = 12;*/
## //4、相当于定义一个没有函数体的函数 和目标函数有相同的返回值和参数,使用委托指向目标函数

//练习1 编写一个程序,定义结构(姓名,年龄,手机号码),再定义一个一维数组,把结构作为数组元素类型,存入数据,然后依次输出

namespace demo_10_11
{
    //定义一个车辆类
   public class Vehicle  
    {
        public Vehicle(int Speed, int MaxSpeed, int Weight)  //构造方法
        {
            this.Speed = Speed;
            this.MaxSpeed = MaxSpeed;
            this.Weight = Weight;
        }
        public int Speed;
        public int MaxSpeed;
        public int Weight;
        public void run (){
            Console.WriteLine("我是一辆车,我平时速度是{0},最大速度是{1}",Speed,MaxSpeed);
        }
        public void stop()
        {
            Console.WriteLine("我的重量:{0}", Weight);
        }
    }
    class Animal //定义了一个动物类
    {
        //构造函数 初始化对象 当我们new创建一个对象的时候会执行构造函数,进行初始化
        public Animal(string name1,int age1,int num)
        {
            this.name = name1;  //this指向当前创建的对象
            this.age = age1;
            this.num = num1;

        }
        

        //字段
        public string name;
        public int age;
        public int num1;
        public int num
        {
            get
            {
                Console.WriteLine("asdfghj");
                return 123;  //表示属性被访问的时候会执行该代码块,同时返回一个值
            }
            set
            {
                Console.WriteLine(value); //set表示当设置num的值的时候会执行,value表示新的值
            }
        }
        //方法
        public void Show()
        {
            Console.WriteLine("我是{0},会打篮球,今年{1}",name,age);
        }
    }
    internal class Program
    {
       
        static void Main(string[] args)
        {
            //5、类(方法,属性,字段等等),增加代码的复用,对象由类生成的
            Animal dog; //声明一个dog对象
            Animal cat;
            dog = new Animal("小贝",18,123);   //创建一个dog对象
            cat = new Animal("小白", 3, 321);
            dog.Show();
            cat.Show();
             //练习2 定义一个车辆(Vehicle)类,具有run,stop等方法,具有speed(速度),maxspeed(最大速度),weight(重量)等域(也叫做字段)
       Vehicle vehicle;
            vehicle = new Vehicle(333,222,111);
            vehicle.run();
            vehicle.stop();
        }
    }
}

练习题1

编写一个程序,定义结构(有姓名,年龄,手机号码三个字段),再定义一个一维数组,把结构作为数组元素类型,存入数据,然后依次输出。

一、面向对象

1.为什么要使用面向对象编程

我们可以将程序模块块,进行模块划分,每个模块提供特定的功能,这样每个模块都是独立的,互不影响,比如我们创建一个动物类,规定了所有动物都有走路的动能,或者性别的属性等等,如果我们想创建一个动物,比如猫,这个时候我们可以使用该类中有的方法和字段,那如果想创建一个狗对象同样可以用该类生成,同样也会有类中的方法,但这时候狗中的方法和属性都是独立和猫中的方法和字段互不影响,我们从这里可以明显看到面向对象可以提高代码的复用性,我不需要重复的定义函数和变量。

2.类是什么?

类实际上是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法。

3.类的基本定义

image.png

4.根据类创建对象

image.png

5.练习

image.png

image.png

6.构造函数

1. 构造函数的作用

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

2. 构造函数的基本写法

构造函数是类中和类同名的一个方法,当创建对象的时候自动调用该方法,一般用于初始化数据 image.png 构造函数中也可以调用对象中的方法,获取对象中的返回值存到对象的字段中

image.png

3.属性和字段

1.字段

image.png

  1. 属性的定义

image.png

  1. 属性的特点
  • 访问属性和访问字段一样,当取得属性的值得时候,就会调用属性中的get块执行get块中的语句,所以get块需要一个返回值,类型就是属性的类型;当我们去给属性设置值得时候,就会调用属性中的set块,我们可以在set块中通过value访问到我们设置的值

image.png 设置只读或者只写,如果我们给属性只设置get块那么就是只读,如如果只设置set块那么就是只写 4. 两个访问修饰符

  • public公开的的,访问最高权限
  • private私有的,只能在类或者结构体内部中使用

image.png

9.使用其他项目中的类

  1. 在本项目中引用其他项目中的命名空间,比如这里我们在demo01项目中引入_demo中的命名空间
  • 第一步 image.png
  • 第二步

image.png

  • 第三步

image.png 注意:想要使用其他项目中的命名空间中的类,那么该类的访问修饰符要设置为public公开的形式

8.匿名类型

当我们不确定数据的类型的时候,我们可以使用关键字var声明变量,那么该变量的类型就由初始化赋的值决定,如果赋的是字符串那么就是字符串类型
image.png

9.类的继承

1.为什么需要继承

很多类在项目中可能有相似的数据,比如在一个游戏中Boss类和小怪类Enemy这些类有很多相同的属性,比如血量,攻击值等,所以这个时候我们可以使用继承来让这两个类继承自同个类

2.实现继承的写法

image.png

10.虚函数(重写父类中的方法)

image.png

练习题

  1. 练习1

image.png

// Monster monster = new Monster();   抽象类无法生成实例,只能被继承
            //public 访问的最高权限,允许在同个项目或不同项目中被访问
            //private 只允许在类或结构中被访问
            //internal 只允许在同个项目中被访问
            //protected 只允许在同一个类或结构或者此类的派生类中被访问