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

C# 面向對象三年夜特征:封裝、繼續、多態

編輯:C#入門知識

C# 面向對象三年夜特征:封裝、繼續、多態。本站提示廣大學習愛好者:(C# 面向對象三年夜特征:封裝、繼續、多態)文章只能為提供參考,不一定能成為您想要的結果。以下是C# 面向對象三年夜特征:封裝、繼續、多態正文


面向對象有封裝、繼續、多態這三個特征,面向對象編程依照實際世界的特色來治理龐雜的事物,把它們籠統為對象,具有本身的狀況和行動,經由過程抵消息的反響來完成義務。這類編程辦法供給了異常壯大的多樣性,年夜年夜增長了代碼的重用機遇,增長了法式開辟的速度,將具有自力性特制的法式代碼包裝起來,修正部門法式代碼時不至於會影響到法式的其他部門。

1.封裝

每一個對象都包括它停止操作所須要的一切信息,封裝只地下代碼單位的對外接口,而隱蔽其詳細完成,盡可能纰謬外地下代碼。應用封裝有許多利益,從設計角度來說,封裝可以對外屏障一些主要的信息,好比應用電腦的人只需曉得怎樣應用電腦便可以,不消曉得這些功效詳細是怎樣完成的;從平安性斟酌,封裝使對代碼的修正加倍平安和輕易,封裝明白的指出了哪些屬性和辦法是內部可以拜訪的,如許當須要調劑這個類的代碼時,只需包管私有屬性不變,私有辦法的參數和前往值類型不變,那末便可以縱情的修正這個類,而不會影響到法式的其他部門;封裝還防止了定名抵觸的成績,封裝有隔離感化,分歧的類中可以有雷同稱號的辦法和屬性,但不會混雜,也能夠削減耦合。

2.繼續

繼續可使用現有類的一切功效,並在不必從新編寫本來的類的情形下,對這些功效停止擴大。應用繼續而發生的類被稱為派生類或子類,而被繼續的類則稱為基類或超類或父類。繼續表現一個類型派生於一個基類型,它具有該基類型的一切成員字段和函數,其子類是對父類的擴大;接口繼續是表現一個類型只繼續了函數的簽名,沒有繼續任何完成代碼。繼續劃分了類的條理性,也能夠說繼續是對類的分組,父類代表的是籠統的類,更經常使用的類,而子類代表的是更加詳細,更加細化的類;繼續是完成代碼重用、擴大的主要手腕。所謂籠統的類是指與詳細的事項相接洽,但只是表達全體而不是詳細概念的類,好比說外形包括正方形、長方形、圓等,這時候候外形是一個籠統的概念,相當於一個父類,而正方形、長方形、圓是詳細的外形,相當因而子類。

3.多態

多態是指法式中同名的分歧辦法共存的情形,重要經由過程子類對父類辦法的籠罩來完成多態。如許,分歧類的對象可以用同名的辦法完成特定的功效,但詳細的完成辦法卻可以分歧。好比說外形包括正方形、長方形、圓等,每一個外形都有面積和周長,然則分歧的外形盤算面積和周長的辦法都分歧。

上面就舉個例子來講明封裝、繼續、多態:

這個例子的基類,就是下面描寫概念的時刻提到的外形,外形是基類,而這個基類是個籠統的概念,而不是詳細的,是以是籠統類,此類包括屬性外形稱號、輸入外形周長和面積的辦法和盤算外形周長和面積的籠統辦法:

  /// <summary>
  /// 外形基類
  /// </summary>
  public abstract class Shape
  {
    /// <summary> 
    /// 外形稱號
    /// </summary>
    public string ShapeName { get; private set; }

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

    /// <summary>
    /// 輸入外形周長
    /// </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>
    /// 盤算外形周長
    /// </summary>
    /// <returns></returns>
    public abstract double CalculatePerimeter();

    /// <summary>
    /// 盤算外形面積
    /// </summary>
    /// <returns></returns>
    public abstract double CalculateArea();
  }

上面再來看詳細的子類,子類是圓,包括屬性半徑、盤算周長和面積的辦法:

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

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

    /// <summary>
    /// 圓的周長
    /// </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;
    }
  }

再來看看長方形,包括屬性高度和寬度、盤算周長和面積的辦法:

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

    /// <summary>
    /// 長方形的高度
    /// </summary>
    public double Height { get; set; }

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

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

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

以下是挪用的代碼:

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

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

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

// 把子類賦給父類,能更好的表現多態性
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());
}

在此例子中,輸入外形的周長和面積的辦法沒有太年夜感化,是由於辦法的詳細完成比擬簡略,假如是龐雜的辦法時會有很年夜感化。好比說想要完成拖拽功效,每一個外形都是可以拖拽的,並且每一個外形拖拽的辦法都邑是一樣的,然則想要完成拖拽功效可不像輸入這麼簡略,這時候候子類可以繼續父類的辦法,直接挪用。

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