第十章 定義類成員

本章內容:

  • 如何定義類成員
  • 如何使用類圖添加成員
  • 如何控制類成員的繼承
  • 如何定義嵌套的類
  • 如何實現接口
  • 如何使用部分類定義
  • 如何使用Call Hierarchy窗口

本章要點ide

主題 重要概念
成員定義

  能夠在類中定義字段、方法、屬性成員。函數

  字段用可訪問性、名稱和類型定義,this

  方法用可訪問性、返回類型、名稱和參數定義,spa

  屬性用可訪問性、名稱、get 和/或 set存取器定義code

  各個屬性存取器能夠有本身的可訪問性,對象

成員隱藏和重寫

  屬性和方法能夠在基類中定義爲抽象或虛擬,以定義繼承。blog

  派生類必須實現抽象的成員,使用override關鍵字能夠重寫虛擬的成員。繼承

  派生類還能夠用new關鍵字提供新的實現代碼,用sealed關鍵字禁止進一步重寫虛擬成員  接口

  基類的實現代碼能夠用base關鍵字調用get

接口的實現

  實現了接口的類必須實現該接口定義爲公共的全部成員

  能夠隱式或顯示實現接口,其中顯示實現代碼只能經過接口引用來使用

部分定義

  使用partial關鍵字能夠把類定義放在多個代碼文件中。

  還可使用partial掛件自建立部分方法

  部分方法有一些限制,包括沒有返回值或out參數

  若是沒有提供實現代碼,部分方法就不能編譯

 

 

 

 

 

 

 

10.1 成員定義

  • public  成員能夠有任何代碼訪問
  • private   成員只能由類中的代碼訪問
  • internal  成員只能由定義它的程序集內部代碼訪問
  • protected  成員只能由類或派生類中的代碼訪問

也可使用關鍵字static來聲明字段、方法、屬性,表示他們是類的靜態成員

 

定義字段

字段用標準的變量聲明格式和前面介紹的修飾符來定義

class MyClass

{

  public int MyInt;

}

字段也可使用關鍵字readonly,表示這個字段只能子啊執行構造函數的過程當中賦值。或由初始化賦值語句賦值

靜態字段必須經過定義他們的類來訪問,而不是經過這個類的對象實例來訪問

另外可使用關鍵字const 來建立一個常量。const成員也是靜態的

定義方法

方法使用標準函數格式、可訪問性和可選的static修飾符來聲明。

class MyClass

{

  public string GetString()

  {

    return "Here is a string.";

  }

}

若是使用static關鍵字,這個方法就只能經過類來訪問,不能經過對象實例來訪問。

方法定義關鍵字:

  • Virtural 方法能夠重寫
  • abstract 方法必須在非抽象的派生類中重寫
  • override 方法重寫了基類方法
  • extern 方法定義放在其餘地方

方法重寫示例:

 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 }
View Code

 

若是使用了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 塊必須有一個屬性類型的返回值

10.2 類成員的其餘議題

隱藏基類方法

 當從基類繼承一個成員是,也就繼承了其現的代碼。

若是繼承的成員是虛擬,就能夠用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;

    }
  }

}
View Code

 

嵌套的類型定義

類能夠嵌套在其餘類中進行定義

主要用於定義對應其包含類來講是私有的類,這樣,名稱空間中的其餘代碼就不能訪問。

 

接口的實現

  • 不容許使用訪問修飾符(public  private  protected  internal),全部的接口成員都是公共的
  • 接口成員不能包含代碼體
  • 接口不能定義字段成員
  • 接口成員不能用關鍵字static、virtual、abstract、sealed來定義
  • 類型定義成員是禁止的

要隱藏繼承基接口的成員,可使用關鍵字new來定義

interface IMyBaseInterface

{

  void Dosomething();

}

interface IMyDeriverInterface : IMyBaseInterface

{

  new void Dosomething();

}

繼承一個實現給定接口的基類,就意味着派生類隱式地支持這個接口

在基類中把實現代碼定義爲虛擬,派生類就能夠替換該實現代碼,而不是隱藏他們。

1.顯示實現接口成員

2.用費公共的可訪問性添加屬性存取器

10.4 部分類定義

使用部分類定義,把類的定義放在多個文件中

只需子啊每一個包含部分類定義的文件中對類使用partial關鍵字便可,

使用部分類定義,partial關鍵字必須出如今包含丁一部分的每一個文件的相同位置

注意:應用於部分類的接口也會應用於整個類。

public partial class MyClass:IMyInterface1{}
public partial class MyClass:IMyInterface2{}

public class MyClass:IMyInterface1,IMyInterface2

是等價的

 

部分類定義能夠在一個部分類定義文件或多個部分類定義文件中包含基類,可是若是基類在多個定義文件中指定,必須是同一個基類,由於類只能繼承一個基類

 

10.5 部分方法定義

部分類也能夠定義部分方法。

部分方法在部分類中定義,但沒有方法體,子啊另外一個部分類中包含實現代碼。在這兩個部分類彙總,都要使用partial關鍵字

部分方法也能夠是靜態的,但他們老是私有的,且不能有返回值。

不能使用out參數,但能夠是ref參數

相關文章
相關標籤/搜索