本章要點ide
主題 | 重要概念 |
成員定義 | 能夠在類中定義字段、方法、屬性成員。函數 字段用可訪問性、名稱和類型定義,this 方法用可訪問性、返回類型、名稱和參數定義,spa 屬性用可訪問性、名稱、get 和/或 set存取器定義code 各個屬性存取器能夠有本身的可訪問性,對象 |
成員隱藏和重寫 | 屬性和方法能夠在基類中定義爲抽象或虛擬,以定義繼承。blog 派生類必須實現抽象的成員,使用override關鍵字能夠重寫虛擬的成員。繼承 派生類還能夠用new關鍵字提供新的實現代碼,用sealed關鍵字禁止進一步重寫虛擬成員 接口 基類的實現代碼能夠用base關鍵字調用get |
接口的實現 | 實現了接口的類必須實現該接口定義爲公共的全部成員 能夠隱式或顯示實現接口,其中顯示實現代碼只能經過接口引用來使用 |
部分定義 | 使用partial關鍵字能夠把類定義放在多個代碼文件中。 還可使用partial掛件自建立部分方法 部分方法有一些限制,包括沒有返回值或out參數 若是沒有提供實現代碼,部分方法就不能編譯 |
也可使用關鍵字static來聲明字段、方法、屬性,表示他們是類的靜態成員
字段用標準的變量聲明格式和前面介紹的修飾符來定義
class MyClass
{
public int MyInt;
}
字段也可使用關鍵字readonly,表示這個字段只能子啊執行構造函數的過程當中賦值。或由初始化賦值語句賦值
靜態字段必須經過定義他們的類來訪問,而不是經過這個類的對象實例來訪問
另外可使用關鍵字const 來建立一個常量。const成員也是靜態的
方法使用標準函數格式、可訪問性和可選的static修飾符來聲明。
class MyClass
{
public string GetString()
{
return "Here is a string.";
}
}
若是使用static關鍵字,這個方法就只能經過類來訪問,不能經過對象實例來訪問。
方法定義關鍵字:
方法重寫示例:
1 public class MyBaseClass 2 3 { 4 5 public virtural void DoSomething() 6 7 { 8 9 //Base implementation. 10 11 } 12 13 } 14 15 public class MyDerivedClass:MyBaseClass 16 17 { 18 19 public override void Dosomething() 20 21 { 22 23 //Derived class implementation,overrides base implementation. 24 25 } 26 27 }
若是使用了override,也可使用sealed 指定在派生類中不能對這個方法做進一步的修改,即這個方法不能由派生類重寫
public class MyDerivedClass:MyBaseClass
{
public override sealed void DoSomething()
{
//derived class implementation,overrides base implementation.
}
}
屬性擁有兩個相似於函數的塊,一個用於獲取屬性的值,一個用於設置屬性的值
這兩個塊也稱爲訪問器:get和set關鍵字來定義
標準的基本結構
public int MyIntProp
{
get
{
//Property get code.
}
set
{
//Property set code.
}
}
get 塊必須有一個屬性類型的返回值
當從基類繼承一個成員是,也就繼承了其現的代碼。
若是繼承的成員是虛擬,就能夠用override關鍵字重寫這段實現代碼。
不管繼承的成員是否爲虛擬,均可以隱藏這些實現代碼
public class MyBaseClass
{
public void Dosomething(){ }
}
public class MyDericedClass:MyBaseClass
{
public void Dosomething(){ }
//或者
new public void DoSomething(){ } //new 關鍵字顯示代表意圖
}
----------------------------------
重寫方法將替換基類中的實現代碼
public class MyBaseClass
{
public virtual void Dosomething(){ }
}
public class MyDericedClass:MyBaseClass
{
public override void Dosomething(){ }
//或者
new public void DoSomething(){ }
}
不管是重寫成員仍是隱藏成員,均可以在派生類的內部訪問基類成員 。例如:
可使用base關鍵字,表示包含在派生類中的基類的實現代碼
public class MyBaseClass
{
public virtual void Dosomething(){ }
}
public class MyDericedClass:MyBaseClass
{
public override void Dosomething()
{
base.DoSomething(); //基類的方法
}
}
this關鍵字
與base同樣,this也能夠用在類成員的內部,且該關鍵字也引用對象實例。this應用的是當前的對象實例
(不能子啊靜態成員中使用this關鍵字,覺得靜態成員不是對象實例的一部分)
this關鍵字最經常使用的功能是把當前對象實例的引用傳遞給一個方法
另外一個常見用法是先定本地類型的成員
public class MyClass { private int someData; public int SomeData { get { return this.someData; } } }
類能夠嵌套在其餘類中進行定義
主要用於定義對應其包含類來講是私有的類,這樣,名稱空間中的其餘代碼就不能訪問。
要隱藏繼承基接口的成員,可使用關鍵字new來定義
interface IMyBaseInterface
{
void Dosomething();
}
interface IMyDeriverInterface : IMyBaseInterface
{
new void Dosomething();
}
繼承一個實現給定接口的基類,就意味着派生類隱式地支持這個接口
在基類中把實現代碼定義爲虛擬,派生類就能夠替換該實現代碼,而不是隱藏他們。
1.顯示實現接口成員
2.用費公共的可訪問性添加屬性存取器
使用部分類定義,把類的定義放在多個文件中
只需子啊每一個包含部分類定義的文件中對類使用partial關鍵字便可,
使用部分類定義,partial關鍵字必須出如今包含丁一部分的每一個文件的相同位置
注意:應用於部分類的接口也會應用於整個類。
public partial class MyClass:IMyInterface1{}
public partial class MyClass:IMyInterface2{}
和
public class MyClass:IMyInterface1,IMyInterface2
是等價的
部分類定義能夠在一個部分類定義文件或多個部分類定義文件中包含基類,可是若是基類在多個定義文件中指定,必須是同一個基類,由於類只能繼承一個基類
部分類也能夠定義部分方法。
部分方法在部分類中定義,但沒有方法體,子啊另外一個部分類中包含實現代碼。在這兩個部分類彙總,都要使用partial關鍵字
部分方法也能夠是靜態的,但他們老是私有的,且不能有返回值。
不能使用out參數,但能夠是ref參數