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
    收藏
    关注
    评论
  • 相关阅读:
    leetcode_09_Palindrome Number (easy)
    JQuery与JavaScript与Ajax三者的区别与联系
    Blockly常用函数
    JavaWeb中四大域对象
    Thymeleaf知识
    列表、字典、元组、集合的区别
    Spring Boot拦截器
    AWS路由表
    Android调试工具DDMS的使用详解
    Android 列表单选对话框
  • 原文地址:https://www.cnblogs.com/leibg/p/2735717.html
Copyright © 2011-2022 走看看