C#核心(持续更新中)
一、类和对象
1、什么是类
基本概念:
具有相同特征
具有相同行为
一类事物的抽象
类是对象的模板
可以通过类创建出对象
类的关键词 class
2、类申明在哪里
类一般申明在namespace语句块中
3、类申明语法
访问修饰符 class 类名 { //特征——成员变量 //行为——成员方法 //保护特征——成员属性 //构造函数和析构函数 //索引器 //运算符重载 //静态成员 }4、类申明实例
命名:帕斯卡命名法
注意:同一个语句块中的不同类不能同名
//这个类用来形容人类 class Person { //特征——成员变量 //行为——成员方法 //保护特征——成员属性 //构造函数和析构函数 //索引器 //运算符重载 //静态成员 }5、什么是类对象
基本概念:
类的申明 和 类对象(变量)申明是两个概念
类的申明 类似 枚举 和 结构体的申明 类的申明相当于申明了一个自定义变量类型
而对象 是类创建出来的
相当于申明一个指定类的变量
类创建对象的过程 一般称为实例化对象
类对象 都是引用类型的
6、实例化对象基本语法
类名 变量名;
类名 变量名 = null;(null代表空)
类名 变量名 = new 类名( );
7、实例化对象
Person p; Person p2 = null;//不分配堆内存空间 Person p3 = new Person();//相当于一个人对象 Person p4 = new Person();//相当于又是一个人对象注意:p3和p4虽然是来自一个类的实例化对象,但是他们的特征、行为等等信息,都是他们独有的,不要觉得他们是共享了数据的两个人,彼此没有任何关系
8、例题
GameObject A = new GameObject(); GameObject B = A; B = null;A在栈空间存储地址,在堆内存分配空间,栈地址指向堆内存中空间
B在栈中开辟新空间,也存储A栈空间中的地址,栈地址指向对内存中空间
B在栈中空间不变,内容变成空,不影响A
GameObject A = new GameObject(); GameObject B = A; B = new GameObject();A在栈空间存储地址,在堆内存分配空间,栈地址指向堆内存中空间
B在栈中开辟新空间,也存储A栈空间中的地址,栈地址指向A的堆内存中空间
B在栈中空间不变,内容变成新的地址,指向堆内存中新的空间,不影响A
Student s = new Student(); s.age = 10; Student s2 = s; s2.age = 20;s在栈空间存储地址,在堆内存分配空间,s栈地址指向s堆内存中空间,s.age存在s的堆空间
s2在栈中开辟新空间,也存储s栈空间中的地址,s2栈地址指向s堆内存中空间,s2.age就是s.age
s2.age改变后,s1.age也改变
二、成员变量和访问修饰符
1、成员变量
基本规则:
申明在类语句块中
用来描述对象的特征
可以是任意变量类型
数量不做限制
是否赋值根据需求来定
实例:
//枚举类——性别 enum E_SexType { Man, Woman, } //结构体——位置 struct Position { } //类 class Person { //特征——成员变量 //姓名 public string name = "ZCloud"; //年龄 public int age; //性别 public E_SexType sex; //朋友 public Person friend; //位置 public Position pos; }注意:如果要在类中申明一个和自己相同类型的成员变量是,不能对它进行实例化,如上面例子中的friend
2、访问修饰符
public —— 公共的 自己(内部)和别人(外部)都能访问和使用
private —— 私有的 自己(内部)才能访问和使用 不写 默认为private
protected —— 保护的 自己(内部)和子类才能访问和使用
3、成员变量初始值
数值类型 默认都是0
bool类型 默认false
引用类型 默认null
看默认值方法:括号里加要看的类型
Console.WriteLine(default(int));三、成员方法
1、成员方法的申明
基本概念:
成员方法(函数)用来表现对象行为
申明在类语句块中
是用来描述对象行为的
规则和函数申明规则相同
受到访问修饰符规则影响
返回值参数不做限制
方法数量不做限制
注意:
成员方法不要加static关键字
成员方法 必须实例化出对象 再通过对象来使用 相当于该对象执行了某个行为
//类 class Person { //特征——成员变量 //姓名 public string name = "ZCloud"; //年龄 public int age; //性别 public E_SexType sex; //行为——成员方法 //判断是否成年 public bool IsAdult() { return age >= 18; } //说话 public void Speak(string str) { Console.WriteLine("{0}说{1}",name,str); } }四、构造函数和析构函数
(一)构造函数
基本概念:
在实例化对象时 会调用的用于初始化的函数
如果不写 默认存在一个无参构造函数
构造函数写法:
没有返回值
函数名和类名必须相同
没有特殊需求时 一般都是public的
class Person { public string name; public int age; public Person() { name = "zCloud"; age = 18; } }//类中是允许自己申明无参构造函数的
//结构体不允许
构造函数可以被重载
