1.對象方法參數傳遞
參數可以通過引用或值傳遞給方法,在變數通過引用傳遞給方法時,被調用的方法將得的就是這個變數,所以在方法內部對變數進行的任何改變在方法退出後仍舊發揮作用.而如果變數是通過值傳遞給方法的,被調用的方法得到的是變數的一個副 本,也就是說大方法退出後,.對一次量進行的修改會丟失.注意字串是不同的.因為字串是值不能改變的.在方法調用中,對字串所做的任何改變都不會影響原來的字串.
如
public void action(int i,intp[] list)
{...}
在方法內部對i進行的修改不會影響到外部變數,對list所做的更改會影響到外部變數
通過值傳送變數是預設的.也可以迫使參數通過引用傳遞給該方法,為此.要使用ref關鍵詞
2.建構函式
系統預設的建構函式只能把成員欄位初始化為標準的預設值(如果欄位在類內部已初始化,則不重新初始化),如:參考型別為空白引用(=null),數實值型別為0,bool型為false.
3.唯讀欄位
常量的概念就是包含一個不能修改的值的變數,但是,常量不必滿足所有的要求,有時可能需要一些變數,其值不能改變,但在運行之前其值是未知的.c#可用唯讀欄位(readonly)解決.
4.繼承與重寫
把一個基類函式宣告為virtual,同樣適用於屬性,該函數就可以在衍生類別中重寫了.
class MybaseClass
{
public virtual string VirtualMethod()
{
return "this method is virtual and defined in mybaseclass"
}
}
繼承
class myDrivedClass:MybaseClass
{
public override string VirtualMethod()
{
return "..."
}
}
如果簽名方法在基類或衍生類別中都進行了聲明.但該方法沒有聲明virtual和override,衍生類別就會隱藏基類方法(書96頁),可用new關鍵詞隱藏基類方法.如:
class MybaseClass
{
public string VirtualMethod()
{
return "this method is virtual and defined in mybaseclass"
}
}
繼承
class myDrivedClass:MybaseClass
{
public new string VirtualMethod()
{
//在繼承方法中可用base關鍵字調用基類方法.如:
// return base.virtualmethod()+"ok";
return "..."
}
}
5.衍生類別建構函式(第100頁)
不論類繼承多少次,建構函式的調用順序是先調用system.obejct.再按照階層自上向下進行.直到到達編譯器要執行個體化的類為止,還要注意在這個過程中,每個建構函式都初化始它自己類中的欄位,這是它的一般工作方式.也就是說基類的建構函式總是最先調用,衍生類別的建構函式可以在執行過程中調用它可以訪問的基類方法.
在編譯器試圖為衍生類別建立建構函式時,預設兩個類的建構函式必須具有相同的簽名.
如果簽名不同,則需用base關鍵字指定執行的建構函式
6.介面
介面不能有建構函式或欄位,介面定義也不允許包含運算子多載,在介面定義中還不允許有聲明成員上的修飾符,介面成員總是公用的,不能聲明為虛方法或靜態方法