1. 程式人生 > >類和繼承

類和繼承

代碼 ret 包含 protect 轉換成 intern mas obj int

  1. 所有的類都派生自Object;
  2. 派生類引用可以轉換成基類;
  3. 屏蔽基類成員使用關鍵字new則可以屏蔽基類成員;
  4. 虛方法和覆寫方法

基類的方法被標記為virtual

在派生類中有匹配的override方法

For Example:

class MyBaseClass{

Virtual public void printf(){

Console.WriteLine(“Fuck”);}

}

class MyDerived:MybaseClass{

Override public void printf(){

Console.WriteLine(“Fuck Again”)

}

Class Pargram{

Static void Main(){

MyDerived derived = new MyDerived();

MyBaseClass mybc =(MyBaseClass)derived;

Derived.printf();

Mybc.printf();

}}

結果輸出:

Fuck Again

Fuck Again

結論:在覆寫後無論有多少繼承都是顯示最高級別的派生類,由基類一直傳遞。而使用new可以屏蔽基類,則override無法覆蓋到。但基類必須由派生類轉換過來。

  1. 訪問級別:

Public:所有的類,包括程序集內部的類和外部的類和外部的類都可以自由地訪問成員。

Private:只能被它自己的類的成員訪問。它不能被其他的類訪問,包括繼承它的類。

Protected:如同訪問private訪問級別,除了一點,它允許派生自該類的類訪問該成員。

Internal:內部成員同一程序集內部的所有類成員都可見,程序集外部類成員不可見。

Protected internal:對所有繼承該類的成員或在該程序集內部的類可以訪問。

  1. 抽象成員:指設計為覆寫的函數成員

特征:

①必須是一個函數成員。也就是說,字段和常量不能為抽象成員;

②必須用abstract修飾符標記;

③不能有代碼塊。抽象成員的代碼用分號表示。

④必須被覆寫,使用override。

可以聲明的4個類型方法,屬性,事件,索引。

  1. 抽象類:指被繼承的類,只能作為其他繼承類的基類。抽象類可以包含抽象成員或普通的非抽象成員。抽象類的成員可以是抽象成員和普通實現的成員的任意組合。不能創建抽象類的實例。並且繼承抽象的必須覆寫。

例:

abstract class base{

Public void printfbase(){

Console.Write(“I am your father!”);}

Abstract void printfderived();

}

class derivedclass:base{

Override printfderived(){

Console.Write(“I am your father too!”);}

Class prograg{

Static void main(){

Baseclass base=new baseclass();

Derivedclass dc=new derivedclass();

Base.printfbase();

Dc.printfderived();}

}

輸出:

I am your father!

I am your father too

8.密封類:sealed 只能被用作獨立的類,不能作為基類。

9.拓展方法,聲明拓展的方法必須聲明static,拓展方法本身必須聲明static。拓展方法必須包含關鍵字this作為第一個參數類型。

Fox Example:

Namaspace ex{

Sealed class MyData{

private double D1,D2,D3;

Public MyData(double d1,double d2,double d3){

D1=d1;

D2=d2;

D3=d3;}

Public double sum(){

Return D1+D2+D3;}

Static class ExtenMyData{

Public static double Average(this MyData data){

return data.sum/3;}

}

Class Pragram{

Static void main(){

MyData data=new MyData(3,4,5);

Console.WriteLine(“Sum is :{0}”,MyData.sum);

Console.WriteLine(“Average is:{0}”,Mydata.Average();}

}

  1. 命名約定

Pascal 約定 標識符每個單詞首字母大寫 適用於:類、方法、命名空間、屬性和公共字段

Camel 除了第一個單詞其他單詞首字母大寫 適用於:局部變量的名稱和方法生命的形參名稱

下劃線加Camel 以下劃線開頭的camel大小標識符 適用於:私有和受保護的字段

類和繼承