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");
            }
        }
    }
  • 相关阅读:
    安卓开发知识点
    安卓开发第一天之环境搭建
    maven中的依赖的范围、传递、冲突,继承
    pom.xml文件
    Maven的目录结构
    tomcat的端口修改不成功
    maven的安装和配置,及在Eclipse里的使用
    servlet的路径跳转及路径问题
    servlet如何获取jsp表单里的数据
    关于“servelt始终驻留在服务器内存”的理解
  • 原文地址:https://www.cnblogs.com/May-day/p/6724021.html
Copyright © 2011-2022 走看看