標籤:code 最小 nbsp 括弧 函數定義 實值型別 short private 產生
一、程式包含
1.資料:運行過程中產生的
2.代碼:代碼指令
資料和代碼都是存放到記憶體中的,代碼指令在程式載入的時候放到記憶體,資料是在程式啟動並執行時候在記憶體中動態地產生,隨時會被回收,要定義變數來存放資料
記憶體儲存的最小單位是位元組,記憶體中存放的是位元,只有1或者0,叫做位,1個位元組可以存放8個bit,8位二進位11111111
二、C#的基礎資料型別 (Elementary Data Type)
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#的許可權修飾符
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執行個體,這個執行個體就會自動被記憶體回收行程回收掉,原來執行個體對象所佔用的記憶體也回收了,程式員是不用管回收的
十一、記憶體模型
程式運行時產生,根據執行時遇到的是變數還是對象決定放到棧還是堆記憶體中
棧:存放局部變數,函數返回後回收
堆:存放new出來的複雜物件,資料成員包,沒有任何一個引用變數指向執行個體記憶體的時候回收
一載入就放到記憶體中去,一點擊exe檔案的時候
資料區段:存放資料(全域變數,待用資料)。常住記憶體,永遠不會回收的,除非程式員自己刪除
程式碼片段:存放函數指令,每一個函數都有一個唯一的指令存放在程式碼片段中,init_person(),所有執行個體公用,一條一條執行。常住記憶體,永遠不會回收的,除非程式員自己刪除
關於Unity的C#基礎學習