一, 類與對象的區別和聯系
二 , 類
1,類的聲明
[訪問修飾符]class 類名{成員;.....}
例如:
Class student //聲明一個student類 { public string name;//屬性 public char sex; public int age; public void sayHello()//方法 { Console.writeline(); } }
2, 類的成員
1)字段:例如private string name;
(2)屬性:通俗點說,就是定義一個public的具有get、set方法的變量,這個變量是用於保護一個私有變量,可以例如上面的name字段,可以通過點擊右鍵重構中的封裝,然後出現get
例如
private string _name; //字段 public string Name //屬性 { get{ return _name;}//可讀 set{_name=value;}//可寫 }
(3)類的方法
A、普通方法
[修飾符] 返回類型 方法名(形參列表)
{
方法體
}
B、構造方法
(A)、構造方法是一個特殊的方法,它的名字和類的名字相同,並且沒有返回值,連void都可以省略不寫。
(B)、當我們定義好一個類之後,如果我們沒有寫構造方法,那麼系統會自動給我們加上一個默認的沒有參數的構造方法,在這個構造方法中什麼也不做,我們也看不到,可是當我們一旦手寫一個構造方法後,系統原先默認給我們添加的那個沒有參數的構造方法就不會再給我們添加了。
(C)、使用構造方法的好處:
a、對多個屬性進行賦值時,不需要重復的寫實例名
b、可以保證用戶在new一個對象的時候必須對某一個屬性進行賦值
c、在創建對象時,對只讀屬性進行初始化
D)構造方法可以有參數,new對象的時候傳遞參數即可
例如
public Student(string name,char sex , int age) { this.Name=name; this,Sex=sex; this.Age=age; } static void Main(string [] args) { Student s=new Student("張三" , "女" , 18); }
(E)構造方法可以重載,也就是又多個參數不同的構造方法,例如以下代碼:
char sex; int chinese; int math; int english; public Student(string name, char sex, int age) { this. name=name; this.age=age; this.sex=sex; } public Student(string name,char sex,int age,int chinese,int math,int eglish) { this.name=name; this.sex=sex; this.age=age; this.chinese=chinese; this.math=math; this.eglish=eglish; }
3、類成員的訪問修飾符
Public : 同一程序集中的任何其他代碼或引用該程序集的其他程序集都可以訪問該類型或成員。
Private ; 該類成員至鞥在本類中被訪問,在類中定義變量或者方法的時候,沒有寫訪問修飾符默認是private
protected ; 只能由該類和由此類的派生類中的代碼才可以訪問
internal ; 同一程序集中的代碼或者氣子類代碼可以訪問,其他程序集代碼不可以
默認訪問修飾符
1):類或結構的默認訪問類型是internal.
2):類中所有的成員,默認均為private。
3):接口默認訪問符是internal
4):接口的成員默認訪問修飾符是public,也不可能是其他訪問修飾符
5):命名空間,枚舉類型成員默認public,也不可能是其他訪問修飾符
6):委托,默認internal
7):在命名空間內部或編譯單元頂部的所有類型,默認是internal,可以人為改為public。
四、靜態與非靜態數據成員
1、由Static修飾的類的方法或屬性,稱為靜態的數據,由於在一個類中只開辟了一塊內存空間存儲,並在類的所有對象實例間共享,它不依賴於具體的對象,因此直接通過類名訪問,而不是通過類的對象實例訪問的
2、而不由static修飾的方法或屬性,稱為非靜態數據,必須先實例化,再通過實例名.方法名或實例名.屬性名來訪問
五、this關鍵字
This關鍵字用來代表對象自身,this關鍵字可以用來解決名稱相同的問題。
string name; cha sex; int age; public Student(string name,char sex,int age) { this.name=name; this.age=age; this.sex=sex; }
上面的代碼參數的名和數據成員的名正好相同,通過使用this關鍵字來區分哪個是參數,哪個是數據成員,此時this關鍵字指向當前的對象,所以帶this的是類的數據成員,而不帶的this的是參數