Visual Studio:針對Java開發人員的C#程式設計語言(2)

來源:互聯網
上載者:User

注意,衍生類別的建構函式隱式調用了基類(或 Java 術語中的超類)的建構函式。在繼承中,所有的基類建構函式都是按照這些類出現在類層次中的順序在衍生類別的建構函式之前調用的。

將類型強制轉換到基類

與在 Java 中一樣,我們不能使用對基類的引用來訪問衍生類別的成員和方法,即使基類引用可能包含對衍生類別型對象的有效引用也同樣如此。

我們可以通過隱式地引用派生的類型來引用衍生類別:

ColorPoint clrpt = new ColorPoint();
Point pt = clrpt;

在這段代碼中,基類引用 pt 包含 clrpt 引用的副本。

base 關鍵字

通過使用 base 關鍵字,我們可以訪問子類中的基類成員,即使這些基類成員在超類中被重寫也同樣如此。例如,我們可以建立一個衍生類別,該類所包含的方法具有與基類中相同的簽名。如果我們在此方法前加上 new 關鍵字,就表示這是一個屬於衍生類別的全新方法。通過 base 關鍵字,我們仍然可以提供方法來訪問基類中的原始方法。

例如,我們的 Point 基類有名為 invert() 的方法,它交換 x 和 y 座標。通過使用下面這樣的代碼,我們可以在衍生類別 ColorPoint 中提供此方法的替代方法:

public new void invert()
{
 int holding = X;
 X = Y;
 Y = holding;
 screenColor = Color.Gray;
}

正如您所見,該方法交換 x 和 y,然後將點的顏色設定為灰色。通過在 ColorPoint 中建立另一個方法(例如下面的這個方法),我們可以提供對此方法的基實現的訪問:

 public void baseInvert()
 {
  base.invert();
 }

然後,我們就可以通過調用 baseInvert() 方法來調用 ColorPoint 對象中的基方法。

ColorPoint clrpt = new ColorPoint();clrpt.baseInvert();

請記住,如果我們將對基類的引用賦值給 ColorPoint 的執行個體,然後訪問它的方法,我們將獲得相同的效果:

Point pt = clrpt;
pt.invert();
選擇建構函式
基類對象總是在任何衍生類別之前構造的。因此基類的建構函式在衍生類別的建構函式之前執行。如果基類有多個建構函式,衍生類別就可以決定要調用的建構函式。例如,我們可以修改我們的 Point 類來添加第二個建構函式:
public class Point
{
 private int x, y;
 public Point()
 {
   x = 0; y = 0;
 }
 public Point(int x, int y)
 {
  this.x = x;
  this.y = y;
 }
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.