c#虚方法(virtual)和抽象方法(abstract)的区别

相同点:

虚方法(virtual)和抽象方法(abstract)都可以被派生类重写

不同点:

1.虚方法(virtual)有方法实体,抽象方法(abstract)没有方法实体【类似接口】

virtual void SayWord()
{
//代码
}
abstract void SayWord();
 2.虚方法(virtual)在派生类中可以不重写,抽象方法(abstract)派生类中必须重写【类似接口】
abstract class Person
{
abstract void SayName();
}
class Man:Person
{
override void SayName()
{
//方法实体
}
}
 3.抽象方法(abstract)必须声明在抽象类中


下面给出实例代码:
class Program
{
static void Main(string[] args)
{
Cat cat
= new Cat("小花","2");
cat.Eat();
//调用父类中的虚方法,如果派生类中重写则调用重写后的
cat.ShowName();
Console.ReadKey();
       //最后输出结果是:
        猫吃东西
        我的名字是小花,今年2岁了 
}
}

public abstract class Animal
{
protected string name;

public string Name
{
get { return name; }
set { name = value; }
}
protected string age;

public string Age
{
get { return age; }
set { age = value; }
}

/// <summary>
/// 虚方法
/// </summary>
public virtual void ShowName()
{
Console.WriteLine(
"我的名字是{0},今年{1}岁了", this.name,this.age);
}
/// <summary>
/// 抽象方法
/// </summary>
public abstract void Eat();


}

public class Cat : Animal
{
/// <summary>
/// 派生类必须重写父类中的抽象方法,否则会报错
/// </summary>
public override void Eat()
{
Console.WriteLine(
"猫吃东西");
}

public Cat(string name, string age)
{
this.name = name;
this.age = age;
}
}

原文地址:https://www.cnblogs.com/zhxhdean/p/2017380.html