C# 抽象类总结
C#中的抽象类:
1、声明一个抽象方法使用abstract关键字。
2、一个类中可以包含一个或多个抽象方法。
3、抽象类中可以存在非抽象的方法。
4、抽象方法不能被直接实例化。
5、实现抽象类用“:”(冒号),实现抽象方法用override关键字。
6、抽象类可以被抽象类所继承,结果仍是抽象类。
7、抽象方法被实现后,不能修改修饰符。
1 public abstract class Person 2 { 3 public abstract void SayHello(); 4 public void about() 5 { 6 Console.WriteLine("Abstract Demo"); 7 } 8 } 9 10 public class Student : Person 11 { 12 public override void SayHello() 13 { 14 Console.WriteLine("SayHello"); 15 } 16 } 17 18 class MainClass 19 { 20 public static void Main() 21 { 22 new Student().SayHello(); 23 } 24 }
8、不能被初始化,只提供了部分实现,但另一个类可以继承它并且能创建它们的实例。
9、一个抽象类可以包含抽象和非抽象的方法,当一个类继承于抽象类,那么这个派生类必须实现所有的基类抽象方法。
10、一个抽象方法是没有方法体的方法。
1 abstract class MyAbs 2 { 3 public void NonAbMethod() 4 { 5 Console.WriteLine("Non-Abstract Method"); 6 } 7 public abstract void AbMethod(); // An abstract method 8 } 9 class MyClass : MyAbs//must implement base class abstract methods 10 { 11 public override void AbMethod() 12 { 13 Console.WriteLine("Abstarct method"); 14 } 15 } 16 class MyClient 17 { 18 public static void Main() 19 { 20 MyClass mc = new MyClass(); 21 mc.NonAbMethod(); 22 mc.AbMethod(); 23 } 24 }
11、通过声明派生类也为抽象类,可以避免所有或特定的虚方法的实现,这即为抽象类的部分实现。
1 abstract class MyAbs 2 { 3 public abstract void AbMethod1(); 4 public abstract void AbMethod2(); 5 } 6 //not necessary to implement all abstract methods 7 //partial implementation is possible 8 abstract class MyClass1 : MyAbs 9 { 10 public override void AbMethod1() 11 { 12 Console.WriteLine("Abstarct method #1") 13 } 14 } 15 class MyClass : MyClass1 16 { 17 public override void AbMethod2() 18 { 19 Console.WriteLine("Abstarct method #2") 20 } 21 } 22 class MyClient 23 { 24 public static void Main() 25 { 26 MyClass mc = new MyClass(); 27 mc.AbMethod1(); 28 mc.AbMethod2(); 29 } 30 }
12、一个抽象类能够继承另一个非抽象类,另外,继承了基类的方法,可以添加新的抽象和非抽象方法。
1 class MyClass1 // Non-Abstract class 2 { 3 public void Method1() 4 { 5 Console.WriteLine("Method of a non-abstract class"); 6 } 7 } 8 abstract class MyAbs : MyClass1 // Inherits from an non-abstract class 9 { 10 public abstract void AbMethod1(); 11 } 12 class MyClass : MyAbs//must implement base class abstract methods 13 { 14 public override void AbMethod1() 15 { 16 Console.WriteLine("Abstarct method #1 of MyClass"); 17 } 18 } 19 class MyClient 20 { 21 public static void Main() 22 { 23 MyClass mc = new MyClass(); 24 mc.Method1(); 25 mc.AbMethod1(); 26 } 27 }
13、一个抽象类也可以从一个接口来实现,这种情况我们必须为所有的方法提供方法体,这些方法来自接口。
1 interface IInterface 2 { 3 void Method1(); 4 } 5 abstract class MyAbs : IInterface 6 { 7 public void Method1() 8 { 9 Console.WriteLine("Method implemented from the IInterface"); 10 } 11 } 12 class MyClass : MyAbs//must implement base class abstract method 13 { 14 } 15 class MyClient 16 { 17 public static void Main() 18 { 19 MyClass mc = new MyClass(); 20 mc.Method1(); 21 } 22 }
14、不能把关键字abstract和sealed一起使用,因为一个密封类不能被抽象。
1 abstract class MyAbs 2 { 3 public abstract void AbMethod1(); 4 public abstract void AbMethod2(); 5 } 6 class MyClass1 : MyAbs 7 { 8 public override void AbMethod1() 9 { 10 Console.WriteLine("Abstarct method #1 of MyClass1"); 11 } 12 public override void AbMethod2() 13 { 14 Console.WriteLine("Abstarct method #2 of MyClass1"); 15 } 16 } 17 class MyClient 18 { 19 public static void Main() 20 { 21 MyAbs ma1 = new MyClass1();// Polymorphism 22 ma1.AbMethod1(); 23 ma1.AbMethod2(); 24 } 25 }

浙公网安备 33010602011771号