当前位置:编程学习 > C#/ASP.NET >>

C#抽象类及其方法的学习

在C#中使用关键字 abstract 来定义抽象类和抽象方法。
不能初始化的类被叫做抽象类,它们只提供部分实现,但是另一个类可以继承它并且能创建它们
的实例。
"一个包含一个或多个纯虚函数的类叫抽象类,抽象类不能被实例化,进一步
一个抽象类只能通过接口和作为其它类的基类使用."- C++ Programming Language by Stroustrup Chapter13.2

抽象类能够被用于类,方法,属性,索引器和事件,使用abstract 在一个类声明中表示该类倾向要作为其它类的基类
成员被标示成abstract,或被包含进一个抽象类,必须被其派生类实现。
 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;
         }
     }
 

例如,一个包含非抽象方法的抽象类:
 
     abstract class MyAbs
      {
         public void NonAbMethod()
          {
             Console.WriteLine("Non-Abstract Method");
         }
     }
     class MyClass : MyAbs
      {
     }
     class MyClient
      {
         public static void Main()
          {
             //MyAbs mb = new MyAbs();//not possible to create an instance
             MyClass mc = new MyClass();
             mc.NonAbMethod(); // Displays 'Non-Abstract Method'
         }
     }
 


一个抽象类可以包含抽象和非抽象方法,当一个类继承于抽象类,那么这个派生类必须实现所有的
的基类抽象方法。

一个抽象方法是一个没有方法体的方法。
  abstract class MyAbs
      {
         public void NonAbMethod()
          {
             Console.WriteLine("Non-Abstract Method");
         }
         public abstract void AbMethod(); // An abstract method
     }
     class MyClass : MyAbs//must implement base class abstract methods
      {
         public override void AbMethod()
          {
             Console.WriteLine("Abstarct method");
         }
     }
     class MyClient
      {
         public static void Main()
          {
             MyClass mc = new MyClass();
             mc.NonAbMethod();
             mc.AbMethod();
         }
     }
 


但是通过声明派生类也为抽象,我们可以避免所有或特定的虚方法的实现,
这就是抽象类的部分实现。
 abstract class MyAbs
      {
         public abstract void AbMethod1();
         public abstract void AbMethod2();
     }
     //not necessary to implement all abstract methods
     //partial implementation is possible
     abstract class MyClass1 : MyAbs
      {
         public override void AbMethod1()
          {
             Console.WriteLine("Abstarct method #1");
         }
     }
     class MyClass : MyClass1
      {
         public override void AbMethod2()
          {
             Console.WriteLine("Abstarct method #2");
         }
     }
     class MyClient
      {
         public static void Main()
          {
             MyClass mc = new MyClass();
             mc.AbMethod1();
             mc.AbMethod2();
         }
     }
 

在C#中,一个抽象类能够继承另一个非抽象类,另外,继承了基类的方法,添加新的
抽象和非抽象方法是可行的。
  class MyClass1 // Non-Abstract class
      {
         public void Method1()
          {
             Console.WriteLine("Method of a non-abstract class");
         }
     }
     abstract class MyAbs : MyClass1 // Inherits from an non-abstract class
      {
         public abstract void AbMethod1();
     }
     class MyClass : MyAbs//must implement base class abstract methods
      {
         public override void AbMethod1()
          {
             Console.WriteLine("Abstarct method #1 of MyClass");
&n

补充:软件开发 , C# ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,