我是靠谱客的博主 温婉枫叶,最近开发中收集的这篇文章主要介绍override 和 new的区别,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

override 和 new 的作用就是:

如果子类的方法前面带有new关键字,则该方法被定义为独立于基类的方法。

如果子类的方法前面带有override关键字,则子类的对象将调用该方法,而不是调用基类方法。

说简单点就是若方法前面带new,则子类使用该方法时使用的是new的方法,但若子类转型成父类,用的是父类原来的方法。

说简单点就是若方法前面带override,则无论子类是否转型为父类,均会使用override的方法。


若子类的方法没有带new或override则系统默认是new,但会出现警告。使用override,父类对应的方法应该是virtual修饰的。

示例如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Tip94
{
    class Program
    {
        static void Main(string[] args)
        {
            TestShape();
            TestDerive();
            TestDerive2();
        }

        private static void TestShape()
        {
            Console.WriteLine("TestShapetStart");
            List<Shape> shapes = new List<Shape>();
            shapes.Add(new Circle());
            shapes.Add(new Rectangle());
            shapes.Add(new Triangle());
            shapes.Add(new Diamond());
            foreach (Shape s in shapes)
            {
                s.MethodVirtual();
                s.Method();
            }
            Console.WriteLine("TestShapetEndn");
        }

        private static void TestDerive()
        {
            Console.WriteLine("TestDerivetStart");
            Circle circle = new Circle();
            Rectangle rectangle = new Rectangle();
            Triangle triangel = new Triangle();
            Diamond diamond = new Diamond();
            circle.MethodVirtual();
            circle.Method();
            rectangle.MethodVirtual();
            rectangle.Method();
            triangel.MethodVirtual();
            triangel.Method();
            diamond.MethodVirtual();
            diamond.Method();
            Console.WriteLine("TestShapetEndn");
        }

        private static void TestDerive2()
        {
            Console.WriteLine("TestDerive2tStart");
            Circle circle = new Circle();
            PrintShape(circle);
            Rectangle rectangle = new Rectangle();
            PrintShape(rectangle);
            Triangle triangel = new Triangle();
            PrintShape(triangel);
            Diamond diamond = new Diamond();
            PrintShape(diamond);
            Console.WriteLine("TestDerive2tEndn");
        }

        static void PrintShape(Shape sharpe)
        {
            sharpe.MethodVirtual();
            sharpe.Method();
        }


        public class Shape
        {
            public virtual void MethodVirtual()
            {
                Console.WriteLine("base MethodVirtual call");
            }

            public void Method()
            {
                Console.WriteLine("base Method call");
            }
        }

        class Circle : Shape
        {
            public override void MethodVirtual()
            {
                Console.WriteLine("circle override MethodVirtual");
            }
        }

        class Rectangle : Shape
        {

        }

        class Triangle : Shape
        {
            public new void MethodVirtual()
            {
                Console.WriteLine("triangle new MethodVirtual");
            }

            public new void Method()
            {
                Console.WriteLine("triangle new Method");
            }
        }

        class Diamond : Shape
        {
            public void MethodVirtual()
            {
                Console.WriteLine("Diamond default MethodVirtual");
            }

            public void Method()
            {
                Console.WriteLine("Diamond default Method");
            }
        }

    }
}


最后

以上就是温婉枫叶为你收集整理的override 和 new的区别的全部内容,希望文章能够帮你解决override 和 new的区别所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(81)

评论列表共有 0 条评论

立即
投稿
返回
顶部