一、程序包含
1.數據:運行過程中產生的
2.代碼:代碼指令
數據和代碼都是存放到內存中的,代碼指令在程序加載的時候放到內存,數據是在程序運行的時候在內存中動態地生成,隨時會被回收,要定義變量來存放數據
內存存儲的最小單位是字節,內存中存放的是二進制數,只有1或者0,叫做位,1個字節可以存放8個bit,8位二進制11111111
二、C#的基本數據類型
1.整型(sbyte帶符號的1個字節的整數,byte不帶符號的1個字節的整數)(short帶符號的2個字節的整數/ushort不帶符號的2個字節的整數)(int帶符號的4個字節的整數/unit不帶符號的4個字節的整數)(long帶符號的8個字節的整數/ulong不帶符號的8個字節的整數)
2.浮點數(float 32bit=4字節/doouble 64bit=8字節)
3.邏輯數(true/false)
4.字符型(16位unicode)
5.復雜類型的引用變量(C中的指針),有一個100個字節的變量A,變量B指向變量A,那么B所占內存就叫做復雜類型的引用變量(64位的.net那么就是64位,32位的.net那么就是32位)像MonoBehaviour就是一個復雜類型,string定義的字符串也是復雜類型
注意:C#比C更嚴謹,float a; a=0.1;是不對的,要寫a=0.1f;
三、C#的權限修飾符
1.public 類以及類型成員的修飾符
2.private 類型成員的修飾符
3.protected 類型成員的修飾符
4.internal 類以及類型成員的修飾符
類型成員包括數據成員(類的實例)和類的方法(函數成員),數據成員不屬於類,屬於類的實例,類中定義多少數據成員,說明類的實例中就有多少數據成員屬性。類的方法是邏輯,通用的,是屬於類,代碼存在固定的地方,只有唯一的一份邏輯,不管有多少個實例都是調用這一個邏輯
人類
數據成員:口,牙齒,舌頭
類的方法:吃飯(調用口,牙齒,舌頭吞下飯菜)
四、C#的類的定義
權限[public外部可以使用類,internal只能在內部使用類 ] +class +類的名稱
public class GameScene {
}
組件也是一個類,類就是復雜數據類型
五、C#的數據成員的定義
權限[public外部可以直接訪問,private外部(定義它的類的大括號外面)不能直接訪問,protected繼承的類可以訪問,internal幾乎沒用過]+類型+數據成員的名稱
private int age;
private string name;
private int sex;
六、C#的類的方法的定義
權限+返回值類型+類的方法的名稱
public int setAge(int age){
邏輯
}
輸入原料,產生牛奶
七、C#的類的實例
1.數據成員(每個實例分配有一組數據成員並占有各自的內存,都不一樣,把一個實例的那組數據成員打包就是一個復雜數據對象,引用變量指向復雜數據類型的內存,使用引用變量來訪問內存)
2.通用邏輯(共用的,只有一個,放在內存中,黑盒子,輸入什么輸出什么)
MyPerson person; //這里的person並不是類的實例,只是了定義一個類實例化的引用變量,類的實例化必須用new關鍵詞創建
person=new MyPerson(); //現在才是類的實例化,person引用變量指向實例
可以使用類的實例引用變量來訪問實例的數據成員+調用類的函數方法
person.age=10;
person.init_person(10,“xiaohong”);
八、C#的變量的定義
1.定義類的一個成員變量(數據成員)
private int age;
2.定義一個局部變量(函數內部定義的變量,有效范圍是代碼執行到這個函數的時候有效,離開這個函數的時候無效,內存回收)
void start(){
int a;
}
九、C#的this對象
類的函數,就像一個盒子,先往里面輸入什么東西,然后執行盒子內部的邏輯,再輸出或者不輸出什么。
已知類的方法在內存中只占用唯一的內存,所有類的實例都是調用公用的類的函數,那么,怎么知道是哪個實例來調用的這個公用函數,怎么知道在處理邏輯的時候到底是處理哪個實例的數據成員的變化
這時候就需要一個this對象
MyPerson xiaohong;
xiaohong=new MyPerson();
xiaohong.init_person(10,“xiaohong”); //把this對象指向xiaohong引用變量所指向的內存,一起指定那個實例
MyPerson xiaoming;
xiaoming=new MyPerson();
xiaoming.init_person(10,“xiaohong”);//把this對象指向xiaoming引用變量所指向的內存,一起指定那個實例
MyPerson類中的函數定義
public void init_person(int age,string name){
this.age=age; //xiaohong.age=age
this.name=name; //xiaohong.name=name
}
this對象,相當於在函數參數傳遞的時候多傳了一個變量進去,(int age,string name,MyPerson this),調用的時候是xiaohong.init_person(10,“xiaohong”,xiaohong);
通過this在函數里面訪問到指定的類的實例的數據,數據成員是private權限的也可以訪問,因為函數是在類內部的。
十、實例的回收
在函數中
MyPerson xiaoming;
xiaoming=new MyPerson();
MyPerson person=xiaoming;//等於定義一個person引用變量,也指向xiaoming實例,這時候兩個引用變量一起指向同一個實例
當函數執行結束的時候,xiaoming和person都釋放掉,等於現在沒有一個引用變量指向xiaoming實例,這個實例就會自動被垃圾回收器回收掉,原來實例對象所占用的內存也回收了,程序員是不用管回收的
十一、內存模型
1.程序運行時產生,根據執行時遇到的是變量還是對象決定放到棧還是堆內存中
棧:存放局部變量,函數返回后回收
堆:存放new出來的復雜對象,數據成員包,沒有任何一個引用變量指向實例內存的時候回收
2.一加載就放到內存中去,一點擊exe文件的時候
數據段:存放數據(全局變量,靜態數據)。常住內存,永遠不會回收的,除非程序員自己刪除
代碼段:存放函數指令,每一個函數都有一個唯一的指令存放在代碼段中,init_person(),所有實例公用,一條一條執行。常住內存,永遠不會回收的,除非程序員自己刪除