zoukankan      html  css  js  c++  java
  • new override virtual 区别与用法

    分析出运行结果?

    View Code

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication2
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                B b = new B();
                A a = new A();
                A a2 = new B();
    
                a.Fun2(a);
                a.Fun2(b);
                b.Fun2(a);
                
                Console.WriteLine("===========================");
                a2.Fun2(a);
                a2.Fun2(a2);
                
               Console.ReadLine();
            }
        }
        
    //先分析a.Fun2(b):传入的参数是B类型的,因此a.Fun1(1)执行的是B类型对象的Fun1方法,运行结果是2
    
    //然后执行Fun1(5),由于运行的是A类型对象的Fun2方法,Fun1自然就是A中的Fun1,运行结果是5
    
    //再分析b.Fun2(a):传入的参数是A类型的,因此a.Fun1(1)执行的是A类型对象的Fun1方法,运行结果是1
    
    //然后运行Fun1(5),由于运行的是B类型对象的Fun2方法,此时的Fun1已经被B覆盖掉了,因此执行的是被覆盖后的方法,运行结果是6
    
        public class A
        {
            public virtual void Fun1(int i)
            {
                Console.WriteLine(i);
            }
    
            public void Fun2(A a)
            {
                a.Fun1(1);
                Fun1(5);
            }
        }
    
        public class B : A
        {
            public new void Fun1(int i)
            {
                base.Fun1(i + 1);
            }
        }
    
    
    
    
    }
    Top
    收藏
    关注
    评论
  • 相关阅读:
    协程方法的开启、关闭以及传参
    五种访问修饰符
    多态之虚方法、抽象类、接口
    递归算法
    继承之构造方法
    鼠标相关操作(Cursor类及相关API)
    遇到的问题(七)
    遇见的问题(六)
    遇见的问题(五)
    函数VS对象
  • 原文地址:https://www.cnblogs.com/leibg/p/2735717.html
Copyright © 2011-2022 走看看