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");
            }
        }
    }
  • 相关阅读:
    mysql新建用户的方法
    工具网站
    如何做好站内锚文本?
    js 创建对象与继承
    js tips
    js作用域链 js没有块级作用域
    css
    instanceof
    问题
    传递,引用副本传递
  • 原文地址:https://www.cnblogs.com/May-day/p/6724021.html
Copyright © 2011-2022 走看看