abstract和virtual

匿名 (未验证) 提交于 2019-12-02 23:48:02

1、abstract

抽象方法就是没有实现的,必须是形如:




抽象类不能被实例化,只能被继承。

抽象类的子类必须实现每个抽象方法。

抽象类里面除了可以有抽象方法以外,也可以有普通的方法。

抽象类的构造函数可以省略,编译器会自动加上,但是不能是一个抽象方法,而只能是一个普通的构造函数。

 1 class Program  2     {  3         static void Main(string[] args)  4         {  5             Employee employee = new Employee();  6             Console.WriteLine(employee.ID);  7             Console.ReadKey();  8         }  9     } 10  11     public abstract class Base 12     { 13         private Guid _id; 14  15         public Base() 16         { 17             this._id = Guid.NewGuid(); 18         } 19  20         public Guid ID 21         { 22             get { return this._id; } 23         } 24     } 25  26     public class Employee : Base 27     { 28          29     }

小结:简单概括一下,抽象类不可以直接实例化,他可以有n个(n>=0)抽象方法,这些抽象方法子类必须实现。

virtual:

1、声明了virtual的方法无需去改动类的声明,他只在此方法上起到影响。
2、只有virtual的方法可以被子类override。
3、子类可以不ouverride父类的virtual方法,这种情况下他就像普通的父类方法一样。
小结:简单概括一下,virtual关键字就是告诉子类,此方法可以被override,但非强制。

using System;  using System.Collections.Generic;  using System.Linq;  using System.Text;     using System.Diagnostics;     namespace TestAppAllHere  {      abstract class TestAbstractSuper      {          public TestAbstractSuper()           {              Debug.WriteLine("这是父类的构造方法");          }             public abstract void Init();             public void Hello()           {              Debug.WriteLine("这是父类的非抽象方法");          }      }  } 

  

 

 调用

<span style="white-space:pre">	</span>    TestAbstractSub sub = new TestAbstractSub();              sub.Init();              sub.Hello(); 

 输出:

这是父类的构造方法  这是子类的构造方法  这是子类重写的方法  这是父类的非抽象方法 

  

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!