zoukankan      html  css  js  c++  java
  • C#虚方法和抽象方法的区别

    一,如下例子

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace DemoTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                B a = new B();
            }
        }
        public class A
        {
            public A()
            {
                Say();
            }
            protected virtual void Say() {
                Console.WriteLine("A");
            }
        }
    
        public class B : A
        {
            protected override void Say()
            {
                Console.Write("B");
            }
        }
    }

    结果:

    输出的则是B

    二,通过调试得出结论:

    当B继承A时,并重写A中的方法,程序运行的时只会进入到B中重写的方法Say(),而不会进入A中的Say()

    三,抽象方法和虚方法的区别

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace abstractOrvirtual
    {
        class Program
        {
            static void Main(string[] args)
            {
                AbstractDemo ab = new Test();
                ab.AbstractEvent();
                ab.VirtualEvent();
                ab.VirtualEvent2();
            }
        }
        public abstract class AbstractDemo
        {
            public abstract void AbstractEvent();
            //public abstract void AbstractEvent2()   //无法声明主体,因为它标记为 abstract
            //{
            //    Console.WriteLine("抽象方法");
            //}
            public virtual void VirtualEvent()
            {
                Console.WriteLine("虚方法");
            }
            public virtual void VirtualEvent2()
            {
                Console.WriteLine("虚方法");
            }
            // public virtual void VirtualEvent2();必须声明主体,因为它未标记为 abstract、extern 或 partial
    
        }
        public class Test : AbstractDemo
        {
            public override void AbstractEvent()  //抽象方法可以被重写
            {
                Console.WriteLine("抽象方法");
            }
            public virtual void VirtualEvent2()//虚方法可以被重写
            {
                Console.WriteLine("虚方法2");
            }
        }
    }
  • 相关阅读:
    【转】C++11优化使用emplace,emplace_back
    面试经历总结
    Hive常用函数
    股票指标
    Visual Studio Code 可以翻盘成功主要是因为什么?
    openpyxl模块操作Excel
    JavaScript(二)
    前端之CSS
    ps导出ICO格式
    Qt 所有版本官方下载地址
  • 原文地址:https://www.cnblogs.com/May-day/p/6724021.html
Copyright © 2011-2022 走看看