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     }


 

posted @ 2012-02-19 15:31  閷哪恍惚  阅读(291)  评论(0)    收藏  举报