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
    收藏
    关注
    评论
  • 相关阅读:
    OLTP和OLAP区别
    JAVA实现文件树
    商务智能及其实现模型
    Java打印程序设计
    J2EE的昨天,今天,明天
    常用jar包之commonslang使用
    CRM与ERP整合的六个切入点
    常用jar包之commonscollection使用
    软件安全技术
    常用jar包之commonsbeanutils使用
  • 原文地址:https://www.cnblogs.com/leibg/p/2735717.html
Copyright © 2011-2022 走看看