程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 3、C#面向對象:封裝、繼承、多態、String、集合、文件(下),

3、C#面向對象:封裝、繼承、多態、String、集合、文件(下),

編輯:C#入門知識

3、C#面向對象:封裝、繼承、多態、String、集合、文件(下),


面向對象多態

一、裝箱和拆箱

裝箱:將值類型轉換為引用類型。object o = 1;值類型給引用類型賦值

拆箱:將引用類型轉換為值類型。int n = (int)o; 強制轉換為值類型

滿足條件:兩種類型是否存在繼承關系。

int n = Convert.ToInt32("12"); 未發生裝箱或拆箱 。int存儲在棧,string存儲在堆

裝箱或拆箱會影響程序運行事件。

二、面向對象多態

對象在調用同一個方法的時候表現出來多種狀態。

1、虛方法

將父類的方法標記為虛方法使用關鍵字virtual,可以被子類重新寫一遍

 

protected void Page_Load(object sender, EventArgs e)
{
    person[] p = new person[2];
    chinese p1 = new chinese();
    jpan p2 = new jpan();
    p[0] = p1;
    p[1] = p2;
    Response.Write(p[0].SayHi()); //調用的方法時取決於自己是什麼對象
    Response.Write(p[1].SayHi());
}

public class person
{
    public virtual string SayHi() //父類方法使用virtual表示該方法是虛方法
    {
        return "人類";
    }
}

public class chinese : person
{
    public override string SayHi() //子類方法使用override表示該方法是重寫虛方法
    {
        return "中國人";
    }
}

public class jpan : person
{
    public override string SayHi() // override
    {
        return "日本人";
    }
}

 

2、抽象類

當父類中的方法不知道如何去實現的時候,可以考略將父類寫成抽象類,將方法寫成抽象方法。

使用abstract定義的類為抽象類,使用abstract定義的方法為抽象方法,抽象函數是沒有方法體的。

抽象類無法實例化父類,直接實例化子類調用。

父類方法中有意義時使用虛方法,父類方法中方法無意義時使用抽象類。

protected void Page_Load(object sender, EventArgs e) { //抽象類不能被實例化 只能實例化子類對象 xingzhuang y = new yuan(5); double mianji = y.mianji(); double zhouchang = y.zhouchang(); Response.Write("半徑為5的原型面積為:" + mianji + ",周長:" + zhouchang); xingzhuang ju = new juxing(10, 20); double mianji1 = ju.mianji(); double zhouchang1 = ju.zhouchang(); Response.Write("高為10的寬為20的矩形面積為:" + mianji1 + ",周長:" + zhouchang1); } public abstract class xingzhuang //被標記為abstract的類稱為抽象類 { public string Name { get; set; } //抽象類中可以包含實例成員,並且實力成員可以不被子類實現。 public abstract double mianji(); //抽象方法必須標記為abstract,並且不能有任何實現,必須在抽象類中。 public abstract double zhouchang(); //抽象成員的訪問修飾符不能是private } public class yuan : xingzhuang { public double R { get; set; } public yuan(double r) { this.R = r; } public override double mianji() //子類繼承抽象類後必須把父類中所有抽象成員重寫 { return Math.PI * this.R * this.R; } public override double zhouchang() //子類繼承抽象類後必須把父類中所有抽象成員重寫 { return 2 * Math.PI * this.R; } } public class juxing : xingzhuang { public double width { get; set; } public double height { get; set; } public juxing(double height, double width) { this.height = height; this.width = width; } public override double mianji() //子類繼承抽象類後必須把父類中所有抽象成員重寫 { return this.height * this.width; } public override double zhouchang() //子類繼承抽象類後必須把父類中所有抽象成員重寫 { return (this.height + this.width) * 2; } } View Code

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved