<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      毛毛的小窩 — 關(guān)注技術(shù)交流、讓我們一起成長(zhǎng)

      導(dǎo)航

      abstract, virtual, override, new 關(guān)鍵字的用法

      簡(jiǎn)單一點(diǎn)來(lái)說(shuō),相見(jiàn)msdn的介紹。

      virtual:包含函數(shù)體,繼承類(lèi)無(wú)需重寫(xiě),當(dāng)然也可以重寫(xiě);
      abstract:不包含函數(shù)體,繼承類(lèi)必須重寫(xiě);
      new:一般方法,繼承類(lèi)想覆蓋之,采用new關(guān)鍵字進(jìn)行;

       

      using System;
      using System.Collections.Generic;
      using System.Text;

      namespace Keywords
      {
          
      public abstract class ShapeClass
          
      {
              
      public string GetShapeName()
              
      {
                  
      return "shape class";
              }


              
      public abstract int Area();

              
      public virtual int Volume()
              
      {
                  
      return 11;
              }


          }


          
      public class Square : ShapeClass
          
      {
              
      // 采用new關(guān)鍵字重寫(xiě)基類(lèi)一般方法
              public new string GetShapeName()
              
      {
                  
      return "square";
              }


              
      // 必須重寫(xiě)
              public override int Area()
              
      {
                  
      return 22;
              }


              
      // 可以重寫(xiě),也可以不重寫(xiě)
              public override int Volume()
              
      {
                  
      //return base.Volume();
                  return 33;
              }

          }


          
      public class Program
          
      {
              
      public static void Main(string[] args)
              
      {
                  Square square 
      = new Square();
                  Console.WriteLine(square.GetShapeName());
                  Console.WriteLine(square.Area());
                  Console.WriteLine(square.Volume());

                  Console.ReadLine();
              }

          }

      }

       

      附錄:msdn的介紹

       

      abstract 修飾符可以和類(lèi)、方法、屬性、索引器及事件一起使用。在類(lèi)聲明中使用 abstract 修飾符以指示某個(gè)類(lèi)只能是其他類(lèi)的基類(lèi)。標(biāo)記為抽象或包含在抽象類(lèi)中的成員必須通過(guò)從抽象類(lèi)派生的類(lèi)來(lái)實(shí)現(xiàn)。

      在此例中,類(lèi) Square 必須提供 Area 的實(shí)現(xiàn),因?yàn)樗缮?ShapesClass

        復(fù)制代碼
              abstract class ShapesClass
                  {
                  abstract public int Area();
                  }
                  class Square : ShapesClass
                  {
                  int x, y;
                  // Not providing an Area method results
                  // in a compile-time error.
                  public override int Area()
                  {
                  return x * y;
                  }
                  }

      有關(guān)抽象類(lèi)的更多信息,請(qǐng)參見(jiàn)抽象類(lèi)、密封類(lèi)及類(lèi)成員(C# 編程指南)。

      備注

      抽象類(lèi)具有以下特性:

      • 抽象類(lèi)不能實(shí)例化。

      • 抽象類(lèi)可以包含抽象方法和抽象訪問(wèn)器。

      • 不能用 sealed(C# 參考)修飾符修改抽象類(lèi),這意味著抽象類(lèi)不能被繼承。

      • 從抽象類(lèi)派生的非抽象類(lèi)必須包括繼承的所有抽象方法和抽象訪問(wèn)器的實(shí)實(shí)現(xiàn)。

      在方法或?qū)傩月暶髦惺褂?abstract 修飾符以指示方法或?qū)傩圆话瑢?shí)現(xiàn)。

      抽象方法具有以下特性:

      • 抽象方法是隱式的虛方法。

      • 只允許在抽象類(lèi)中使用抽象方法聲明。

      • 因?yàn)槌橄蠓椒暶鞑惶峁?shí)際的實(shí)現(xiàn),所以沒(méi)有方法體;方法聲明只是以一個(gè)分號(hào)結(jié)束,并且在簽名后沒(méi)有大括號(hào) ({ })。例如:

          復(fù)制代碼
        public abstract void MyMethod();
      • 實(shí)現(xiàn)由一個(gè)重寫(xiě)方法提供,此重寫(xiě)方法是非抽象類(lèi)的成員。

      • 在抽象方法聲明中使用 staticvirtual 修飾符是錯(cuò)誤的。

      除了在聲明和調(diào)用語(yǔ)法上不同外,抽象屬性的行為與抽象方法一樣。

      • 在靜態(tài)屬性上使用 abstract 修飾符是錯(cuò)誤的。

      • 在派生類(lèi)中,通過(guò)包括使用 override 修飾符的屬性聲明,可以重寫(xiě)抽象的繼承屬性。

      抽象類(lèi)必須為所有接口成員提供實(shí)現(xiàn)。

      實(shí)現(xiàn)接口的抽象類(lèi)可以將接口方法映射到抽象方法上。例如:

        復(fù)制代碼
      interface I
                  {
                  void M();
                  }
                  abstract class C: I
                  {
                  public abstract void M();
                  }

      示例

      在本例中,DerivedClass 類(lèi)是從抽象類(lèi) BaseClass 派生的。抽象類(lèi)包含一個(gè)抽象方法 AbstractMethod 和兩個(gè)抽象屬性 XY。

        復(fù)制代碼
      // abstract_keyword.cs
                  // Abstract Classes
                  using System;
                  abstract class BaseClass   // Abstract class
                  {
                  protected int _x = 100;
                  protected int _y = 150;
                  public abstract void AbstractMethod();   // Abstract method
                  public abstract int X    { get; }
                  public abstract int Y    { get; }
                  }
                  class DerivedClass : BaseClass
                  {
                  public override void AbstractMethod()
                  {
                  _x++;
                  _y++;
                  }
                  public override int X   // overriding property
                  {
                  get
                  {
                  return _x + 10;
                  }
                  }
                  public override int Y   // overriding property
                  {
                  get
                  {
                  return _y + 10;
                  }
                  }
                  static void Main()
                  {
                  DerivedClass o = new DerivedClass();
                  o.AbstractMethod();
                  Console.WriteLine("x = {0}, y = {1}", o.X, o.Y);
                  }
                  }

      輸出

       
      x = 111, y = 161

      注釋

      在上面的示例中,如果試圖通過(guò)使用下面的語(yǔ)句將抽象類(lèi)實(shí)例化:

        復(fù)制代碼
      BaseClass bc = new BaseClass();   // Error

      將出現(xiàn)錯(cuò)誤,指出編譯器無(wú)法創(chuàng)建抽象類(lèi)“BaseClass”的實(shí)例。

       

      virtual 關(guān)鍵字用于修飾方法、屬性、索引器或事件聲明,并且允許在派生類(lèi)中重寫(xiě)這些對(duì)象。例如,此方法可被任何繼承它的類(lèi)重寫(xiě)。

        復(fù)制代碼
      public virtual double Area()
                  {
                  return x * y;
                  }

      虛擬成員的實(shí)現(xiàn)可由派生類(lèi)中的重寫(xiě)成員更改。有關(guān)使用 virtual 關(guān)鍵字的更多信息,請(qǐng)參見(jiàn)使用 Override 和 New 關(guān)鍵字控制版本(C# 編程指南)了解何時(shí)使用 Override 和 New 關(guān)鍵字(C# 編程指南)

      備注

      調(diào)用虛方法時(shí),將為重寫(xiě)成員檢查該對(duì)象的運(yùn)行時(shí)類(lèi)型。將調(diào)用大部分派生類(lèi)中的該重寫(xiě)成員,如果沒(méi)有派生類(lèi)重寫(xiě)該成員,則它可能是原始成員。

      默認(rèn)情況下,方法是非虛擬的。不能重寫(xiě)非虛方法。

      virtual 修飾符不能與 static、abstract 和 override 修飾符一起使用。

      除了聲明和調(diào)用語(yǔ)法不同外,虛擬屬性的行為與抽象方法一樣。

      • 在靜態(tài)屬性上使用 virtual 修飾符是錯(cuò)誤的。

      • 通過(guò)包括使用 override 修飾符的屬性聲明,可在派生類(lèi)中重寫(xiě)虛擬繼承屬性。

      示例

      在該示例中,Dimensions 類(lèi)包含 xy 兩個(gè)坐標(biāo)和 Area() 虛方法。不同的形狀類(lèi),如 Circle、CylinderSphere 繼承 Dimensions 類(lèi),并為每個(gè)圖形計(jì)算表面積。每個(gè)派生類(lèi)都有各自的 Area() 重寫(xiě)實(shí)現(xiàn)。根據(jù)與此方法關(guān)聯(lián)的對(duì)象,通過(guò)調(diào)用正確的 Area() 實(shí)現(xiàn),該程序?yàn)槊總€(gè)圖形計(jì)算并顯示正確的面積。

      在前面的示例中,注意繼承的類(lèi) Circle、SphereCylinder 都使用了初始化基類(lèi)的構(gòu)造函數(shù),例如:

        復(fù)制代碼
      public Cylinder(double r, double h): base(r, h) {}

      這類(lèi)似于 C++ 的初始化列表。

        復(fù)制代碼
      // cs_virtual_keyword.cs
                  using System;
                  class TestClass
                  {
                  public class Dimensions
                  {
                  public const double PI = Math.PI;
                  protected double x, y;
                  public Dimensions()
                  {
                  }
                  public Dimensions(double x, double y)
                  {
                  this.x = x;
                  this.y = y;
                  }
                  public virtual double Area()
                  {
                  return x * y;
                  }
                  }
                  public class Circle : Dimensions
                  {
                  public Circle(double r) : base(r, 0)
                  {
                  }
                  public override double Area()
                  {
                  return PI * x * x;
                  }
                  }
                  class Sphere : Dimensions
                  {
                  public Sphere(double r) : base(r, 0)
                  {
                  }
                  public override double Area()
                  {
                  return 4 * PI * x * x;
                  }
                  }
                  class Cylinder : Dimensions
                  {
                  public Cylinder(double r, double h) : base(r, h)
                  {
                  }
                  public override double Area()
                  {
                  return 2 * PI * x * x + 2 * PI * x * y;
                  }
                  }
                  static void Main()
                  {
                  double r = 3.0, h = 5.0;
                  Dimensions c = new Circle(r);
                  Dimensions s = new Sphere(r);
                  Dimensions l = new Cylinder(r, h);
                  // Display results:
                  Console.WriteLine("Area of Circle   = {0:F2}", c.Area());
                  Console.WriteLine("Area of Sphere   = {0:F2}", s.Area());
                  Console.WriteLine("Area of Cylinder = {0:F2}", l.Area());
                  }
                  }

      輸出

       
      Area of Circle   = 28.27
                  Area of Sphere   = 113.10
                  Area of Cylinder = 150.80

       

      posted on 2008-11-28 10:06  mjgforever  閱讀(706)  評(píng)論(0)    收藏  舉報(bào)

      主站蜘蛛池模板: 亚洲精品国产综合久久一线| 少妇人妻偷人精品免费| 国产精品国产亚洲区久久| 自拍日韩亚洲一区在线| 国产精品中文字幕观看| 国产精品国产三级国av| 日本亚洲一级中文字幕| 日韩精品人妻中文字幕| 亚洲国产欧美在线人成| 东京热人妻无码一区二区AV| 久久久久人妻精品一区三寸| 色777狠狠狠综合| 亚洲男人天堂东京热加勒比| 欧美三级中文字幕在线观看| 久久精品人妻无码一区二区三区| 99精品久久久中文字幕| 精品自拍自产一区二区三区| 中文字幕av国产精品| 2021国产成人精品久久 | 国产精品va无码一区二区| 中文字幕结果国产精品| 日韩av第一页在线播放| 精品一区二区三区日韩版| 性欧美VIDEOFREE高清大喷水| 国产69精品久久久久99尤物| 久久综合97丁香色香蕉| 麻豆tv入口在线看| 亚洲成av人片乱码色午夜| 中文成人无字幕乱码精品区| 少妇午夜啪爽嗷嗷叫视频| 91密桃精品国产91久久| 色噜噜一区二区三区| 青草99在线免费观看| 国产欧美日韩精品a在线观看| 亚洲精品日本一区二区| 韩国精品一区二区三区在线观看 | 中文字幕日韩有码av| 囯产精品久久久久久久久久妞妞| 国产又爽又黄又爽又刺激| 国产成人av一区二区三区不卡| 亚洲av永久无码精品水牛影视|