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

深入解析C#中的abstract抽象類

 更新時(shí)間:2016年01月29日 15:10:36   投稿:goldensun  
這篇文章主要介紹了深入解析C#中的abstract抽象類,包括定義抽象類等C#面相對(duì)象編程中的基礎(chǔ)知識(shí),需要的朋友可以參考下

抽象類和類成員
通過(guò)在類定義前面放置關(guān)鍵字 abstract,可以將類聲明為抽象類。例如:

public abstract class A
{
  // Class members here.
}

抽象類不能實(shí)例化。抽象類的用途是提供一個(gè)可供多個(gè)派生類共享的通用基類定義。例如,類庫(kù)可以定義一個(gè)抽象類,將其用作多個(gè)類庫(kù)函數(shù)的參數(shù),并要求使用該庫(kù)的程序員通過(guò)創(chuàng)建派生類來(lái)提供自己的類實(shí)現(xiàn)。
抽象類也可以定義抽象方法。方法是將關(guān)鍵字 abstract 添加到方法的返回類型的前面。例如:

public abstract class A
{
  public abstract void DoWork(int i);
}

抽象方法沒(méi)有實(shí)現(xiàn),所以方法定義后面是分號(hào),而不是常規(guī)的方法塊。抽象類的派生類必須實(shí)現(xiàn)所有抽象方法。當(dāng)抽象類從基類繼承虛方法時(shí),抽象類可以使用抽象方法重寫(xiě)該虛方法。例如:

// compile with: /target:library
public class D
{
  public virtual void DoWork(int i)
  {
    // Original implementation.
  }
}

public abstract class E : D
{
  public abstract override void DoWork(int i);
}

public class F : E
{
  public override void DoWork(int i)
  {
    // New implementation.
  }
}

如果將 virtual 方法聲明為 abstract,則該方法對(duì)于從抽象類繼承的所有類而言仍然是虛方法。繼承一個(gè)抽象方法的類不能訪問(wèn)該方法的原始實(shí)現(xiàn)。在上一個(gè)示例中,類 F 中的 DoWork 不能調(diào)用類 D 中的 DoWork。通過(guò)這種方式,抽象類可以強(qiáng)制派生類為虛方法提供新的方法實(shí)現(xiàn)。

定義抽象屬性

下面的示例演示如何定義抽象屬性。抽象屬性聲明不提供屬性訪問(wèn)器的實(shí)現(xiàn),它只聲明該類支持屬性,而將訪問(wèn)器實(shí)現(xiàn)留給派生類。下面的示例演示如何實(shí)現(xiàn)從基類繼承的抽象屬性。
此示例由三個(gè)文件組成,其中每個(gè)文件都單獨(dú)編譯,產(chǎn)生的程序集由下一次編譯引用:

  • abstractshape.cs:包含抽象 Area 屬性的 Shape 類。
  • shapes.cs:Shape 類的子類。
  • shapetest.cs:測(cè)試程序,它顯示某些 Shape 派生對(duì)象的面積。

若要編譯該示例,請(qǐng)使用以下命令:

csc abstractshape.cs shapes.cs shapetest.cs

這樣將生成可執(zhí)行文件 shapetest.exe。
該文件聲明的 Shape 類包含 double 類型的 Area 屬性。

// compile with: csc /target:library abstractshape.cs
public abstract class Shape
{
  private string name;

  public Shape(string s)
  {
    // calling the set accessor of the Id property.
    Id = s;
  }

  public string Id
  {
    get
    {
      return name;
    }

    set
    {
      name = value;
    }
  }

  // Area is a read-only property - only a get accessor is needed:
  public abstract double Area
  {
    get;
  }

  public override string ToString()
  {
    return Id + " Area = " + string.Format("{0:F2}", Area);
  }
}

屬性的修飾符就放置在屬性聲明中。例如:

public abstract double Area

聲明抽象屬性時(shí)(如本示例中的 Area),指明哪些屬性訪問(wèn)器可用即可,不要實(shí)現(xiàn)它們。在此示例中,只有一個(gè) get 訪問(wèn)器可用,因此該屬性是只讀的。
下面的代碼演示 Shape 的三個(gè)子類,并演示它們?nèi)绾沃貙?xiě) Area 屬性來(lái)提供自己的實(shí)現(xiàn)。

// compile with: csc /target:library /reference:abstractshape.dll shapes.cs
public class Square : Shape
{
  private int side;

  public Square(int side, string id)
    : base(id)
  {
    this.side = side;
  }

  public override double Area
  {
    get
    {
      // Given the side, return the area of a square:
      return side * side;
    }
  }
}

public class Circle : Shape
{
  private int radius;

  public Circle(int radius, string id)
    : base(id)
  {
    this.radius = radius;
  }

  public override double Area
  {
    get
    {
      // Given the radius, return the area of a circle:
      return radius * radius * System.Math.PI;
    }
  }
}

public class Rectangle : Shape
{
  private int width;
  private int height;

  public Rectangle(int width, int height, string id)
    : base(id)
  {
    this.width = width;
    this.height = height;
  }

  public override double Area
  {
    get
    {
      // Given the width and height, return the area of a rectangle:
      return width * height;
    }
  }
}

下面的代碼演示一個(gè)測(cè)試程序,它創(chuàng)建若干 Shape 派生對(duì)象,并輸出它們的面積。

// compile with: csc /reference:abstractshape.dll;shapes.dll shapetest.cs
class TestClass
{
  static void Main()
  {
    Shape[] shapes =
    {
      new Square(5, "Square #1"),
      new Circle(3, "Circle #1"),
      new Rectangle( 4, 5, "Rectangle #1")
    };

    System.Console.WriteLine("Shapes Collection");
    foreach (Shape s in shapes)
    {
      System.Console.WriteLine(s);
    }
  }
}

輸出:

  Shapes Collection
  Square #1 Area = 25.00
  Circle #1 Area = 28.27
  Rectangle #1 Area = 20.00

相關(guān)文章

  • VS.net VSS時(shí),編譯報(bào)錯(cuò):未能向文件“.csproj.FileListAbsolute.txt”寫(xiě)入命令行 對(duì)路徑 的訪問(wèn)被拒絕。

    VS.net VSS時(shí),編譯報(bào)錯(cuò):未能向文件“.csproj.FileListAbsolute.txt”寫(xiě)入命令行 對(duì)路

    在VSS上把項(xiàng)目的Bin和Obj目錄刪除,然后重新取出項(xiàng)目,編譯成功。
    2009-06-06
  • C#使用Socket實(shí)現(xiàn)心跳的方法示例

    C#使用Socket實(shí)現(xiàn)心跳的方法示例

    這篇文章主要介紹了C#使用Socket實(shí)現(xiàn)心跳的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • oledb連接access數(shù)據(jù)庫(kù)示例

    oledb連接access數(shù)據(jù)庫(kù)示例

    本文為大家介紹一個(gè)oledb連接access數(shù)據(jù)庫(kù)的示例,代碼很簡(jiǎn)單,可以直接使用
    2014-01-01
  • C#使用帶like的sql語(yǔ)句時(shí)防sql注入的方法

    C#使用帶like的sql語(yǔ)句時(shí)防sql注入的方法

    這篇文章主要介紹了C#使用帶like的sql語(yǔ)句時(shí)防sql注入的方法,采用了一個(gè)比較簡(jiǎn)單的字符串過(guò)濾方法就可以有效提高sql語(yǔ)句的安全性,防止sql注入,需要的朋友可以參考下
    2014-09-09
  • C#使用Newtonsoft.Json中的JObject對(duì)象

    C#使用Newtonsoft.Json中的JObject對(duì)象

    本文詳細(xì)講解了C#使用Newtonsoft.Json中JObject對(duì)象的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • WinForm實(shí)現(xiàn)應(yīng)用自動(dòng)鎖定的詳細(xì)步驟

    WinForm實(shí)現(xiàn)應(yīng)用自動(dòng)鎖定的詳細(xì)步驟

    在開(kāi)發(fā)企業(yè)級(jí)WinForm應(yīng)用時(shí),數(shù)據(jù)安全始終是核心需求,自動(dòng)鎖定功能正是為解決這些問(wèn)題而生!它通過(guò)監(jiān)控用戶活動(dòng)狀態(tài),在預(yù)設(shè)時(shí)間內(nèi)無(wú)操作時(shí)自動(dòng)上鎖,要求輸入密碼或驗(yàn)證碼才能恢復(fù)訪問(wèn),本文給大家介紹了WinForm實(shí)現(xiàn)應(yīng)用自動(dòng)鎖定的詳細(xì)步驟,需要的朋友可以參考下
    2025-08-08
  • WPF通過(guò)使用C#代碼給控件賦值

    WPF通過(guò)使用C#代碼給控件賦值

    開(kāi)發(fā)中偶爾會(huì)用到使用c#代碼給控件賦值,這里需要通過(guò)F12找到控件的賦值類型,然后在看控件可以使用那種方式賦值,花點(diǎn)時(shí)間研究一下,基本都可以通過(guò)c#代碼給控件賦值的,需要的朋友可以參考下
    2023-09-09
  • C#讀取命令行參數(shù)的方法

    C#讀取命令行參數(shù)的方法

    這篇文章主要介紹了C#讀取命令行參數(shù)的方法,可實(shí)現(xiàn)讀取程序輸入命令行的所有參數(shù),便于調(diào)試程序,比較簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2015-04-04
  • c#定期刪除文件的實(shí)操方法

    c#定期刪除文件的實(shí)操方法

    在本篇文章里小編給大家分享了關(guān)于c#定期刪除文件的方法和步驟,有需要的朋友們可以學(xué)習(xí)下。
    2019-02-02
  • C#自動(dòng)化實(shí)現(xiàn)檢測(cè)并刪除PDF文件中的空白頁(yè)面

    C#自動(dòng)化實(shí)現(xiàn)檢測(cè)并刪除PDF文件中的空白頁(yè)面

    PDF文檔在日常工作和生活中扮演著重要的角色,本文將深入探討如何使用C#編程語(yǔ)言,結(jié)合強(qiáng)大的PDF處理庫(kù),自動(dòng)化地檢測(cè)并刪除PDF文件中的空白頁(yè)面,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-09-09

最新評(píng)論

盐边县| 沈阳市| 共和县| 通州市| 南华县| 绩溪县| 孝昌县| 门头沟区| 阿巴嘎旗| 海门市| 四子王旗| 库伦旗| 巴彦淖尔市| 仙居县| 孟村| 昆山市| 安吉县| 平度市| 焦作市| 兴化市| 西林县| 上林县| 富锦市| 花莲市| 临漳县| 安泽县| 巴马| 衡南县| 屏南县| 金塔县| 蒙山县| 聊城市| 深水埗区| 防城港市| 和政县| 洪泽县| 寿光市| 邳州市| 揭西县| 唐山市| 抚顺县|