【Unity 12】 C#面向对象编程

22 篇文章 9 订阅

PS:本系列笔记将会记录我此次在北京学习Unity开发的总体过程,方便后期写总结,笔记为日更。
笔记内容均为 自己理解,不保证每个都对。
C#笔记未按照难度排列

Part 1 面向对象编程类的定义

1、简介:
面向对象编程是一种强有效的编程方法,在最开始都是采用面向过程编程,但随着代码长度的变化,面向过程编程的重复利用率低,可维护性差,因此就有了面向对象编程,将长代码进行分割成为一个个小零件(类)提高了代码的重复利用率以及可维护性

2、包含:
1、属性:描述性的,例如HP, EXP, SKILL等。
2、方法:动作性的,例如发动攻击,开始跑步等。
3、封装:让对象代码与其他对象无关。可拓展性,可维护性。
4、继承:派生类继承基类的部分属性和部分方法,提高代码的复用率。
5、多态:父类的指针指向子类,而调用子类的方法。提高代码的多样性。

3、类:
1、命名:权限 + class + 方法名
2、权限
3、Class表示抽象出一个类
4、Player为类名, 驼峰命名法 每个单词的首字母都大写
例如:

public class Player
    {
        //在本类的方法体内可以任意访问 类里静态或非静态的属性
        
        //Static、Const:实例化后放在全局静态区内,只会实例化一次
        //实例化时非Static、Const修饰的都会重新拷贝一份,Static、Const只会被实例化一次
        private byte bloodCount;    //血量        public byte bloodCount;    //血量
        protected int coinCount;     //金币     本类和子类能访问
        private int exp;            //经验        本类能访问
        public  static byte level;         //等级
        public const bool sex = true;           //性别
    }

例如:

4、权限:
系统默认的权限是private

名字权限
Public在类外的任意地方都可以访问
Protected只能在类里或者子类里才能访问
Private只能在本类里访问,子类不能访问
Internal表示值在本程序集内使用

5、构造函数:
构造函数分为:无参构造函数、有参构造函数、静态构造函数 三种
系统自带一个无参构造函数
例如:

        public Player()     //无参构造函数
        {
            Console.WriteLine("Player的构造函数!!!"); 
        }

        public Player(int age)     //有参构造函数
        {
            Console.WriteLine("Player的构造函数!!!");
        }


        //全局静态构造函数
        //1、不能有参数
        //2、不能被权限修饰
        //3、优先级高于普通构造函数


        //static修饰的静态构造函数、成员属性、方法
        //1、在第一次涉及静态修饰的时候都会被同时调用

        static Player()     //静态构造方法必须无参
        {
            level = 50;     //static修饰的可以互相访问
            Console.WriteLine("Player的静态构造方法");
        }

实例化使用:

Player tmpPlayerA = new Player();

6、方法: 功能

        public void Attack(byte temp)       //方法
        {
            //this  表示当前类的实例
            this.bloodCount -= temp;
        }
        
        public void Debug()
        {
            Console.WriteLine("bloodCount == " + bloodCount);
            Console.WriteLine("level == " + level);
        }

set方法和get方法:

        public byte BloodCount
        {
            get //访问器
            {
                Console.WriteLine("Get Success!!!");
                //使用  没有赋值就是get方法
                return bloodCount;
            }

            set //修改器
            {
                Console.WriteLine("Set Success!!!");
                //赋值就是set方法
                //value为等号右侧的值
                bloodCount = value; //value为关键词
            }
        }

方法的使用:

tmpPlayerA.BloodCount = 100;    //调用set方法
Console.WriteLine("PlayerA HP:" + tmpPlayerA.BloodCount);	//调用get方法
tmpPlayerC.Attack(50);	//调用Attack方法
tmpPlayerC.Debug();		//调用Debug方法

7、析构函数: 回收垃圾,自动调用 手动调用:System.GC.Collect();

        //析构函数      ~ + 类名
        //1、在类使用完的时候会释放
        //2、系统自动调用

        ~Player()   
        {
            Console.WriteLine("析构成功");
        }

Part 2 访问属性的方法:

外部:
访问非静态 成员变量的方法:
1、直接访问 类.成员变量 player.bloodCoint = 10
2、get和set方法 public byte BloodCount { get set}
3、索引访问 public int this[int index] 类型可以更改,可以定义多个索引器

内部:
直接用变量的名字
This.变量的名字

外部:
访问静态 成员变量的方法:
1、类名.属性 Player.level

内部:
直接用变量的名字
This.变量的名字

索引访问:

        //public表示外部可以访问
        //int为返回类型
        //this[int index]为方法  即为索引器
        //索引器是一个特殊的set 和 get方法

 	    public int this[int index]
        {
            get
            {
                Console.WriteLine("index == " + index);
                if (index == 0)
                {
                    return coinCount;
                }
                else
                if(index == 1)
                {
                    return level;
                }
                else
                {
                    return 10;
                }
            }

            set
            {
                if(index == 0)
                {
                    coinCount = value;
                }
                else
                if(index == 1)
                {
                    level = 100;
                }
                else
                {
                    Console.WriteLine("Something else");
                }
            }


        }

索引方法的使用:

            tmpPlayerD[0] = 500;
            tmpPlayerD[1] = 400;
            tmpPlayerD[2] = 300;

Part 3 注意项:

封装性:
1、一般不讲成员属性直接暴露在外面 例如 tmpPlayerB.bloodCount = 100;
2、提升代码的可维护性

Static和Const:
1、Static、Const:实例化后放在全局静态区内,只会实例化一次
2、实例化时非Static、Const修饰的都会重新拷贝一份,Static、Const只会被实例化一次
3、static修饰的静态构造函数、成员属性、方法,在第一次涉及静态修饰的时候都会被同时调用

例如:

            Player player;
            Console.WriteLine("player level == " + Player.level);   //涉及static所以 同时调用static的构造函数

Readonly:只读属性

    public readonly int age = 18;
    //readonly只读属性,不能对其进行赋值
    //可以在声明时赋值
    //也可以在构造函数内赋值
    //不能在其他的方赋值

全局方法:
1、能够访问全局变量或者全局方法
2、不能访问非全局的变量和方法

静态构造函数
1、不能有参数
2、不能被权限修饰
3、优先级高于普通构造函数
4、只会调用一次

传参:
1、传参时尽量不要传入与成员变量相同名字的参数
2、使用 this.成员变量
3、在方法体内没有加this的变量,程序优先使用局部遍历即传进的参数

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值