C#基礎筆記(第九天)
1、面向過程<-->面向對象
面向過程:面向的是完成這件事兒的過程,強調的是完成這件事兒的動作。
面向對象:找個對象幫你做事兒。意在寫出一個通用的代碼,屏蔽差異。
每個人都有姓名,性別,身高,體重,年齡. 這些可以看做是對象的屬性
對象必須是看得見摸得著的
我們把這些具有相同屬性和相同方法的對象進行進一步的封裝,抽象出來 類這個概念。
類就是個模子,確定了對象應該具有的屬性和方法。
對象是根據類創建出來的。
2、類
語法:
[public] class 類名
{
字段;(存儲數據,存儲多個值)
屬性;
方法;
}
寫好了一個類之後,我們需要創建這個類的對象,
創建這個類的對象過程就叫類的實例化。
使用關鍵字 new.
this:表示當前這個類的對象。
類是不占內存的,而對象是占內存的。
之前只有類,沒有對象,當我們實例化對象,給它賦值之後(對象),對象就出現了。以後操作就針對這個對象去操作。這就是面向對象的操作。
自定義類,不是系統提供的,自己寫的。
字段默認情況下有初值。字段占內存。
3、屬性
屬性的作用就是保護字段、對字段的賦值和取值進行限定。
屬性的本質就是兩個方法,一個叫get()一個叫set()。
√ get() √ set() 可讀可寫屬性。
√ get() × set() 只讀屬性
× get() √ set() 只寫屬性
Fields 字段
Methods 方法
Property 屬性
set就是把傳進來的值通過屬性賦值給字段。
一個給賦值的時候調用,一個給取值的時候調用
用屬性裏的兩個方法來對字段進行限定。
當你給屬性賦值的時候,首先會執行set方法。
當你輸出屬性的值得時候,會執行get方法。
過程中屬性是沒有存值的,只是一個過渡,再處理。
****字段就是女人,屬性才是男人。
女人在家相夫教子,所有跟外界打交道的事情都是男人做。
4、對象
當我們創建好一個類的對象後,需要給這個對象的每個屬性去賦值。
我們管這個過程稱之為對象的初始化。
在set裏面判斷value的值,在get裏面判斷字段的值。
set 把賦值給屬性的值再賦值給字段, get 把字段的值返回(返回之前可以做一個限定)
方法中輸出字段不輸出屬性的話,get判斷就用不上,沒辦法限定了。
5、靜態和非靜態的區別
1)、在非靜態類中,既可以有實例成員,也可以有靜態成員。(非靜態字段,屬性,方法和靜態字段,屬性,方法)
2)、在調用實例成員的時候,需要使用對象名.實例成員;
在調用靜態成員的時候,需要使用類名.靜態成員名;
get{ return person._name;}
set{person._name=value;}
總結:靜態成員必須使用類名去調用,而實例成員使用對象名調用。
靜態函數中,只能訪問靜態成員,不允許訪問實例成員。
實例函數中,既可以使用靜態成員,也可以使用實例成員。
靜態類中只允許有靜態成員,不允許出現實例成員。
問:為什麽靜態類不讓創建對象?
答:因為它調用要用類名去調用,創建對象沒用,用不了,語法上沒有。
使用:
1)、如果你想要你的類當做一個"工具類"去使用,這個時候可以考慮將類寫成靜態的。經常使用的,如console
2)、靜態類在整個項目中資源共享。
只有在程序全部結束之後,靜態類才會釋放資源。
console也是靜態類
靜態類不允許被實例化
問:為什麽經常使用就要寫成靜態類?
答:因為不需要創建對象,只需要類名.方法名。方便
靜態類需要存儲數據,占內存的。
內存的存儲區域分為3大類
堆 棧 靜態存儲區域
從QQ程序進入,QQ登錄一次,使用微博,遊戲,音樂,空間都不需要再登陸
應用程序多個模塊。要把用戶名和密碼存在靜態類中。
靜態類什麽時候釋放資源?程序結束的時候釋放資源。靜態類在執行時會一直消耗資源,所以不要用太多
釋放資源。GC Garbage Collection垃圾回收器
6、構造函數
作用:幫助我們初始化對象(給對象的每個屬性依次的賦值)
構造函數是一個特殊的方法:
1)、構造函數沒有返回值,連void也不能寫。
2)、構造函數的名稱必須跟類名一樣。
重載 一樣的名不一樣的參數
public student();
創建對象的時候會執行構造函數
構造函數是可以有重載的。
***
類當中會有一個默認的無參數的構造函數,當你寫一個新的構造函數之後,不管是有參數的還是
無參數的,那個默認的無參數的構造函數都被幹掉了。
7、new關鍵字
Person zsPerson=new Person();
new幫助我們做了3件事兒:
1)、在內存中開辟一塊空間
2)、在開辟的空間中創建對象
3)、調用對象的構造函數進行初始化對象
8、this關鍵字
1)、代表當前類的對象
2)、在類當中顯示的調用本類的構造函數 :this()
public Student(string name,char gender,int age,int chinese,int math,int english )
{
this.Name = name;
this.Gender = gender;
this.Age = age;
this.Chinese = chinese;
this.Math = math;
this.English = english;
}
public Student(string name,char gender,int age):this(name,gender,age,0,0,0) 沒有的就用0來代替
{
this.Name = name;
this.Gender = gender;
this.Age = age;
}
不用寫冗余代碼
9、析構函數
當程序結束的時候,析構函數才執行
幫助我們釋放資源
.net引用了 GC Garbage collection 一般不手動調用都是自動調用。
有可能程序結束的時候,GC沒有馬上幫我們釋放資源
如果資源沒有被馬上釋放的話,這時候就使用析構函數(如果希望馬上釋放資源)
放類裏面
~Student()
{
console.writeline("我是析構函數");
}
10、總結
面向對象:概念
類 語法
成員:字段,屬性,方法,構造函數
對象
new
this
靜態和非靜態的區別:調用上的區別
C#基礎筆記(第九天)