關於Unity的C#基礎學習(一)


一、程序包含

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(),所有實例公用,一條一條執行。常住內存,永遠不會回收的,除非程序員自己刪除

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM