zoukankan      html  css  js  c++  java
  • C# 虚方法、override和new

    使用new关键字来做调用

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            public class Aminal
            {
                public string Name;  // 定义宠物的名字
                public void PrintName()
                {
                    Console.WriteLine("宠物的名字:" + Name);
                }
            }
            // Dog继承Aminal类
            public class Dog : Aminal
            {
                // 隐藏父类的PrintName
                new public void PrintName()
                {
                    Console.WriteLine("名字为:" + Name);
                }
            }
            static void Main(string[] args)
            {
                // 使用new关键字隐藏,取决于通过什么类型的调用
                //Dog dog = new Dog();  // 打印的是使用Dog里面的PrintName的方法
                Aminal dog = new Dog();  // 调用的是Aminal里面的PrintName的方法
                dog.Name = "your name";
                dog.PrintName();
            }
        }
    }

    使用vitual虚方法和override重写

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            public class Aminal
            {
                public string Name;  // 定义宠物的名字
                // 定义虚方法
                virtual public void PrintName()
                {
                    Console.WriteLine("宠物的名字:" + Name);
                }
            }
            // Dog继承Aminal类
            public class Dog : Aminal
            {
                // 重写
                public override void PrintName()
                {
                    // base.PrintName(); // 这个是调用父类的虚方法
                    Console.WriteLine("这是重写方法,{0}", this.Name);
                }
            }
            static void Main(string[] args)
            {
                Aminal dog = new Dog();  // 输出的是重写方法的内容
                dog.Name = "your name";
                dog.PrintName();
            }
        }
    }

     虚方法需要注意的地方:

    1.重写虚方法必须要使用相同的可访问属性,如:private就不可以

    2.不能重写static和非虚方法

    3.方法、属性、索引器、事件都可以使用虚方法重写

    override:重写父类的方法。

    new:用来隐藏父类的方法。

    主要区别在于:override不管使用的是父类声明还是子类声明,调用的都是override重写后的方法;new则不一样,如果声明时使用的是父类,那么姜辉调用父类的virtual方法,如果使用的是子类声明,那么调用的是子类new声明的方法。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.IO;
    
    namespace ConsoleApplication3
    {
        class OneClass
        {
            public virtual void a_func()
            {
                Console.WriteLine("这是virtual方法...");
            }
        }
        class TwoClass : OneClass
        {
            public override void a_func()
            {
                Console.WriteLine("这是override方法...");
            }
        }
        class ThreeClass : OneClass
        {
            public new void a_func()
            {
                Console.WriteLine("这是new方法...");
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                // 子类声明
                OneClass a = new OneClass();
                a.a_func();  // 输出"这是virtual方法..."
                TwoClass b = new TwoClass();
                b.a_func();  // 输出"这是override方法..."
                ThreeClass c = new ThreeClass();
                c.a_func();  // 输出"这是new方法..."
                // 上面三种都很容易理解。
                // 关键是下面这两种,父类声明
                OneClass d = new TwoClass();
                d.a_func();  // 输出"这是override方法..."
                OneClass e = new ThreeClass();
                e.a_func();  // 输出"这是virtual方法..."
                Console.ReadKey();
            }
        }
    }
  • 相关阅读:
    博客园设置自定义壁纸 模板
    html常用标签及属性,常用英语单词
    解释器安装与环境变量的添加
    计算机基础知识
    python 标准库大全
    进程的状态转换详解
    python 合集set,交集,并集,差集,对称差集别搞混
    vue组件,可以通过npm引用的组件
    use vue vuex vue-router, not use webpack
    Webpack+Vue如何导入Jquery和Jquery的第三方插件
  • 原文地址:https://www.cnblogs.com/namejr/p/10263818.html
Copyright © 2011-2022 走看看