最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# 面向?qū)ο笕筇匦裕悍庋b、繼承、多態(tài)

 更新時(shí)間:2016年03月25日 15:40:30   作者:唯心雨愛(ài)  
本文主要介紹了面向?qū)ο蟮娜筇匦裕悍庋b、繼承、多態(tài),提供了簡(jiǎn)單的示例供大家參考和理解。

面向?qū)ο笥蟹庋b、繼承、多態(tài)這三個(gè)特性,面向?qū)ο缶幊贪凑宅F(xiàn)實(shí)世界的特點(diǎn)來(lái)管理復(fù)雜的事物,把它們抽象為對(duì)象,具有自己的狀態(tài)和行為,通過(guò)對(duì)消息的反應(yīng)來(lái)完成任務(wù)。這種編程方法提供了非常強(qiáng)大的多樣性,大大增加了代碼的重用機(jī)會(huì),增加了程序開(kāi)發(fā)的速度,將具備獨(dú)立性特制的程序代碼包裝起來(lái),修改部分程序代碼時(shí)不至于會(huì)影響到程序的其他部分。

1.封裝

每個(gè)對(duì)象都包含它進(jìn)行操作所需要的所有信息,封裝只公開(kāi)代碼單元的對(duì)外接口,而隱藏其具體實(shí)現(xiàn),盡量不對(duì)外公開(kāi)代碼。使用封裝有很多好處,從設(shè)計(jì)角度來(lái)講,封裝可以對(duì)外屏蔽一些重要的信息,比如使用電腦的人只要知道怎么使用電腦就可以,不用知道這些功能具體是怎么實(shí)現(xiàn)的;從安全性考慮,封裝使對(duì)代碼的修改更加安全和容易,封裝明確的指出了哪些屬性和方法是外部可以訪問(wèn)的,這樣當(dāng)需要調(diào)整這個(gè)類(lèi)的代碼時(shí),只要保證公有屬性不變,公有方法的參數(shù)和返回值類(lèi)型不變,那么就可以盡情的修改這個(gè)類(lèi),而不會(huì)影響到程序的其他部分;封裝還避免了命名沖突的問(wèn)題,封裝有隔離作用,不同的類(lèi)中可以有相同名稱的方法和屬性,但不會(huì)混淆,也可以減少耦合。

2.繼承

繼承可以使用現(xiàn)有類(lèi)的所有功能,并在無(wú)須重新編寫(xiě)原來(lái)的類(lèi)的情況下,對(duì)這些功能進(jìn)行擴(kuò)展。使用繼承而產(chǎn)生的類(lèi)被稱為派生類(lèi)或子類(lèi),而被繼承的類(lèi)則稱為基類(lèi)或超類(lèi)或父類(lèi)。繼承表示一個(gè)類(lèi)型派生于一個(gè)基類(lèi)型,它擁有該基類(lèi)型的所有成員字段和函數(shù),其子類(lèi)是對(duì)父類(lèi)的擴(kuò)展;接口繼承是表示一個(gè)類(lèi)型只繼承了函數(shù)的簽名,沒(méi)有繼承任何實(shí)現(xiàn)代碼。繼承劃分了類(lèi)的層次性,也可以說(shuō)繼承是對(duì)類(lèi)的分組,父類(lèi)代表的是抽象的類(lèi),更常用的類(lèi),而子類(lèi)代表的是更為具體,更為細(xì)化的類(lèi);繼承是實(shí)現(xiàn)代碼重用、擴(kuò)展的重要手段。所謂抽象的類(lèi)是指與具體的事項(xiàng)相聯(lián)系,但只是表達(dá)整體而不是具體概念的類(lèi),比如說(shuō)形狀包含正方形、長(zhǎng)方形、圓等,這時(shí)候形狀是一個(gè)抽象的概念,相當(dāng)于一個(gè)父類(lèi),而正方形、長(zhǎng)方形、圓是具體的形狀,相當(dāng)于是子類(lèi)。

3.多態(tài)

多態(tài)是指程序中同名的不同方法共存的情況,主要通過(guò)子類(lèi)對(duì)父類(lèi)方法的覆蓋來(lái)實(shí)現(xiàn)多態(tài)。這樣,不同類(lèi)的對(duì)象可以用同名的方法完成特定的功能,但具體的實(shí)現(xiàn)方法卻可以不同。比如說(shuō)形狀包含正方形、長(zhǎng)方形、圓等,每個(gè)形狀都有面積和周長(zhǎng),但是不同的形狀計(jì)算面積和周長(zhǎng)的方法都不同。

下面就舉個(gè)例子來(lái)說(shuō)明封裝、繼承、多態(tài):

這個(gè)例子的基類(lèi),就是上面描述概念的時(shí)候提到的形狀,形狀是基類(lèi),而這個(gè)基類(lèi)是個(gè)抽象的概念,而不是具體的,因此是抽象類(lèi),此類(lèi)包含屬性形狀名稱、輸出形狀周長(zhǎng)和面積的方法以及計(jì)算形狀周長(zhǎng)和面積的抽象方法:

  /// <summary>
  /// 形狀基類(lèi)
  /// </summary>
  public abstract class Shape
  {
    /// <summary> 
    /// 形狀名稱
    /// </summary>
    public string ShapeName { get; private set; }

    public Shape(string shapeName)
    {
      ShapeName = shapeName;
    }

    /// <summary>
    /// 輸出形狀周長(zhǎng)
    /// </summary>
    public virtual void PrintPerimeter(double perimeter)
    {
      Console.WriteLine(ShapeName + " Perimeter: " + perimeter);
    }

    /// <summary>
    /// 輸出形狀面積
    /// </summary>
    public virtual void PrintArea(double area)
    {
      Console.WriteLine(ShapeName + " Area: " + area);
    }

    /// <summary>
    /// 計(jì)算形狀周長(zhǎng)
    /// </summary>
    /// <returns></returns>
    public abstract double CalculatePerimeter();

    /// <summary>
    /// 計(jì)算形狀面積
    /// </summary>
    /// <returns></returns>
    public abstract double CalculateArea();
  }

下面再來(lái)看具體的子類(lèi),子類(lèi)是圓,包含屬性半徑、計(jì)算周長(zhǎng)和面積的方法:

  /// <summary>
  /// 圓
  /// </summary>
  public class Circle : Shape
  {
    /// <summary>
    /// 圓的半徑
    /// </summary>
    public double R { get; set; }

    public Circle()
      : base("Circle")
    {
      this.R = 0;
    }

    /// <summary>
    /// 圓的周長(zhǎng)
    /// </summary>
    /// <returns></returns>
    public override double CalculatePerimeter()
    {
      return 2 * Math.PI * R;
    }

    /// <summary>
    /// 圓的面積
    /// </summary>
    /// <returns></returns>
    public override double CalculateArea()
    {
      return Math.PI * R * R;
    }
  }

再來(lái)看看長(zhǎng)方形,包含屬性高度和寬度、計(jì)算周長(zhǎng)和面積的方法:

public class Rectangle : Shape
  {
    /// <summary>
    /// 長(zhǎng)方形的長(zhǎng)度
    /// </summary>
    public double Width { get; set; }

    /// <summary>
    /// 長(zhǎng)方形的高度
    /// </summary>
    public double Height { get; set; }

    public Rectangle()
      : base("Rectangle")
    {
      Width = 0;
      Height = 0;
    }

    /// <summary>
    /// 長(zhǎng)方形的周長(zhǎng)
    /// </summary>
    /// <returns></returns>
    public override double CalculatePerimeter()
    {
      return (Width + Height) * 2;
    }

    /// <summary>
    /// 長(zhǎng)方形的面積
    /// </summary>
    /// <returns></returns>
    public override double CalculateArea()
    {
      return Width * Height;
    }
  }

以下是調(diào)用的代碼:

Circle circle = new Circle();
circle.R = 20;

Square square = new Square();
square.Edge = 10;

Rectangle rectangle = new Rectangle();
rectangle.Width = 20;
rectangle.Height = 30;

// 把子類(lèi)賦給父類(lèi),能更好的體現(xiàn)多態(tài)性
IList<Shape> shapeList = new List<Shape>();
shapeList.Add(circle);
shapeList.Add(square);
shapeList.Add(rectangle);

foreach (var shape in shapeList)
{
  shape.PrintPerimeter(shape.CalculatePerimeter());
  shape.PrintArea(shape.CalculateArea());
}

在此例子中,輸出形狀的周長(zhǎng)和面積的方法沒(méi)有太大作用,是因?yàn)榉椒ǖ木唧w實(shí)現(xiàn)比較簡(jiǎn)單,如果是復(fù)雜的方法時(shí)會(huì)有很大作用。比如說(shuō)想要實(shí)現(xiàn)拖拽功能,每個(gè)形狀都是可以拖拽的,而且每個(gè)形狀拖拽的方法都會(huì)是一樣的,但是想要實(shí)現(xiàn)拖拽功能可不像輸出這么簡(jiǎn)單,這時(shí)候子類(lèi)可以繼承父類(lèi)的方法,直接調(diào)用。

相關(guān)文章

  • C#中使用CAS實(shí)現(xiàn)無(wú)鎖算法的示例詳解

    C#中使用CAS實(shí)現(xiàn)無(wú)鎖算法的示例詳解

    CAS(Compare-and-Swap)是一種多線程并發(fā)編程中常用的原子操作,用于實(shí)現(xiàn)多線程間的同步和互斥訪問(wèn)。本文將利用CAS實(shí)現(xiàn)無(wú)鎖算法,需要的可以參考一下
    2023-04-04
  • C#實(shí)現(xiàn)DevExpress本地化實(shí)例詳解

    C#實(shí)現(xiàn)DevExpress本地化實(shí)例詳解

    這篇文章主要介紹了C#實(shí)現(xiàn)DevExpress本地化,以實(shí)例形式較為詳細(xì)的分析了DevExpress本地化的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • C#委托與事件初探

    C#委托與事件初探

    事件是委托的一種特殊形式,當(dāng)發(fā)生有意義的事情時(shí),事件處理對(duì)象通知過(guò)程。接下來(lái)通過(guò)本文給大家介紹C#委托與事件初探,感興趣的朋友一起學(xué)習(xí)吧
    2016-02-02
  • C# 值類(lèi)型的實(shí)現(xiàn)

    C# 值類(lèi)型的實(shí)現(xiàn)

    本文主要介紹了C# 值類(lèi)型的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • 淺談Unity腳本生命周期與執(zhí)行順序

    淺談Unity腳本生命周期與執(zhí)行順序

    在Unity中,腳本可以理解為附加在游戲?qū)ο笊系挠糜诙x游戲?qū)ο笮袨榈闹噶畲a。必須綁定在游戲?qū)ο笊喜拍荛_(kāi)始它的生命周期。游戲?qū)ο罂梢岳斫鉃槟苋菁{各種組件的容器,游戲?qū)ο蟮乃薪M件一起決定了這個(gè)對(duì)象的行為和游戲中的表現(xiàn)
    2021-06-06
  • C#中XmlTextWriter讀寫(xiě)xml文件詳細(xì)介紹

    C#中XmlTextWriter讀寫(xiě)xml文件詳細(xì)介紹

    .NET中包含了很多支持XML的類(lèi),這些類(lèi)使得程序員使用XML編程就如同理解XML文件一樣簡(jiǎn)單。在這篇文章中,我將給出這樣的一個(gè)類(lèi)的使用示例,這個(gè)類(lèi)就是XmlTextWriter類(lèi)
    2013-04-04
  • C# ManualResetEvent用法詳解

    C# ManualResetEvent用法詳解

    這篇文章主要介紹了C# ManualResetEvent用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • C#開(kāi)發(fā)WinForm根據(jù)條件改變DataGridView行顏色

    C#開(kāi)發(fā)WinForm根據(jù)條件改變DataGridView行顏色

    這篇文章介紹了C#開(kāi)發(fā)WinForm根據(jù)條件改變DataGridView行顏色的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • 使用C#實(shí)現(xiàn)將Word?轉(zhuǎn)文本存儲(chǔ)到數(shù)據(jù)庫(kù)并進(jìn)行管理

    使用C#實(shí)現(xiàn)將Word?轉(zhuǎn)文本存儲(chǔ)到數(shù)據(jù)庫(kù)并進(jìn)行管理

    這篇文章主要為大家詳細(xì)介紹了如何使用C#實(shí)現(xiàn)將Word?轉(zhuǎn)文本存儲(chǔ)到數(shù)據(jù)庫(kù)并進(jìn)行管理,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考一下
    2024-03-03
  • C#利用VS中插件打包并發(fā)布winfrom程序

    C#利用VS中插件打包并發(fā)布winfrom程序

    這篇文章主要為大家詳細(xì)介紹了C#利用VS中插件打包并發(fā)布winfrom程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08

最新評(píng)論

龙南县| 绥滨县| 三亚市| 兖州市| 沈丘县| 秦安县| 常宁市| 弥渡县| 金坛市| 中阳县| 三门县| 盐边县| 株洲市| 惠来县| 永修县| 青阳县| 怀集县| 平顶山市| 清水县| 宜宾市| 剑河县| 澄城县| 敦化市| 吉木萨尔县| 富裕县| 台州市| 玛沁县| 若尔盖县| 郑州市| 河东区| 万宁市| 舒兰市| 若羌县| 临高县| 正宁县| 敖汉旗| 新龙县| 万全县| 楚雄市| 沙田区| 黎城县|