优秀的编程知识分享平台

网站首页 > 技术文章 正文

C#自学——虚方法、隐藏方法、重写、重载

nanyue 2024-09-11 05:30:40 技术文章 8 ℃
using System;

namespace Application
{
    class Animal
    {
        public virtual void Run()
        {
            Console.WriteLine("Animal 虚方法的关键词是 virtual");
        }

        public void Eat()
        {
            Console.WriteLine("Animal 这是普通的方法");
        }
      
      	public void Eat(string name)	// 重载方法:同样的方法,不同的参数参数
      	{
          	Console.WriteLine("它喜欢吃的食物是",name);
        }

        public virtual void Sleep()
        {
            Console.WriteLine("Animal 这是虚方法");
        }
    }

    class Dog : Animal
    {
        public override void Run()
        {
            Console.WriteLine("Dog 重写方法的关键词是 override");
        }

        public new void Eat()
        {
            Console.WriteLine("Dog 隐藏方法的关键词是 new,这是隐藏了普通方法");
        }

        public new void Sleep()
        {
            Console.WriteLine("Dog 这是隐藏了虚方法");
        }
    }

    class Print
    {
        static void Main()
        {
            Console.WriteLine("向上转型为 Animal");
          	// Dog向上转型为Animal之后,只可以调用共有的或者自己的方法或者属性
            Animal animal = new Dog(); // 程序从右往左读的
            animal.Run();
            animal.Eat();
          	animal.Eat("狗粮"); //重载方法 会根据参数自动调用相应的方法
            animal.Sleep();
          
            Console.WriteLine("\n向下转型为 Dog");
          	// Animal 向下转型为 Dog 之后,可以调用基类和派生类的所有方法或者属性
            Dog dog1 = animal as Dog;
            if (dog1 != null)
            {
                dog1.Run();
                dog1.Eat();
              	dog1.Eat("猫粮");
                dog1.Sleep();
            }
            else
                Console.WriteLine("转型失败");
        }
    }
}

输出:

向上转型为 Animal
Dog 重写方法的关键词是 override	// 这是重写之后的 Dog类 下面 Run 的方法,重写就是把基类的方法变成一个同名的新方法
Animal 这是普通的方法	// Animal只能调用自己的或者共有的方法,不能调用派生类的方法,这是最开始的 Eat方法
它喜欢吃的食物是狗粮	// 这是 重载 之后的方法
Animal 这是虚方法

向下转型为 Dog
Dog 重写方法的关键词是 override	// 已经被重写了
Dog 隐藏方法的关键词是 new,这是隐藏了普通方法	// Animal 的 Eat 方法被隐藏了,仅仅只是隐藏,实际上还是存在的
它喜欢吃的食物是猫粮
Dog 这是隐藏了虚方法

Tags:

最近发表
标签列表