网站首页 > 技术文章 正文
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 这是隐藏了虚方法
- 上一篇: C#常见技能_线程(c#线程编程)
- 下一篇: 优化代码性能:C#中轻松测量执行时间
猜你喜欢
- 2024-09-11 C# (Winform)实现USB HID自定义接口操作(控制下位机,如STM32)
- 2024-09-11 Tcp服务端一直sleep,客户端不断发送数据产生的问题
- 2024-09-11 C#中的进程与线程及其并发编程(c#多线程并发处理)
- 2024-09-11 在服务中默默地执行C#业务代码(在服务中默默地执行c#业务代码)
- 2024-09-11 C#中AutoResetEvent和ManualResetEvent使用场景
- 2024-09-11 C# AutoResetEvent 和 ManualResetEvent 在 WinForms 应用中的使用
- 2024-09-11 C#基础 DateTime详解(c# datetime.date)
- 2024-09-11 C# 面向对象 静态类和静态成员(c# 静态方法和实例方法)
- 2024-09-11 C#编程中如何使用线程(c#线程是什么)
- 2024-09-11 一篇文章搞懂C#中的接口(c#中接口怎么使用)
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)