【Unity12】C#⾯向对象编程
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 //访问器
writeline函数{
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的变量,程序优先使⽤局部遍历即传进的参数

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。