• 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;
    }
    }

  • 相关阅读:
    c# 4.0新功能--隐式类型
    常用的sql语句记录
    算法学习-回文数判断
    算法学习-两数之和
    RSA加密(前端js)和MD5加密(后台)同时使用实例
    layer父页获取弹出层输入框里面的值
    关于checkbox的全选和反选实例
    jQuery实用小技巧-获取选中的的下拉框和返回头部滑动动画
    jQuery实用小技巧--输入框文字获取和失去焦点
    得到网站下的文件虚拟路径的方法
  • 原文地址:https://www.cnblogs.com/zhxhdean/p/2017380.html
Copyright © 2020-2023  润新知