c# 继承 new,base的使用

在C#中,继承是指一个类(称为派生类或子类)从另一个类(称为基类或父类)继承属性和方法的机制。继承可以帮助我们重用代码并构建层次化的类结构。要使用继承,在定义类时使用冒号(:)指定其基类。下面是一个简单的C#继承示例:

// 定义基类
public class Animal
{public void Eat(){Console.WriteLine("The animal is eating.");}public void Sleep(){Console.WriteLine("The animal is sleeping.");}
}// 定义派生类
public class Dog : Animal
{public void Bark(){Console.WriteLine("The dog is barking.");}
}// 在程序中使用
class Program
{static void Main(){Dog dog = new Dog();dog.Eat(); // 可以调用基类的方法dog.Sleep(); // 可以调用基类的方法dog.Bark(); // 可以调用派生类自己的方法}
}

在上面的示例中,类Animal是基类,类Dog是派生类。派生类Dog继承了基类Animal的Eat()和Sleep()方法,并且还拥有自己的Bark()方法。在程序中可以创建Dog的实例,并调用继承的方法以及自己的方法。


在C#中,在子类中使用`new`关键字可以隐藏基类中的成员。这通常发生在子类中重新定义了一个与基类中同名的成员时。使用`new`关键字可以显式地指定要隐藏基类成员的方法或属性。在这种情况下,基类成员仍然存在,但在子类中使用`new`关键字定义的成员将会隐藏基类成员。

下面是一个简单的示例,演示了如何在C#中使用new关键字:

// 定义基类
public class Animal
{public void Eat(){Console.WriteLine("The animal is eating.");}
}// 定义派生类
public class Dog : Animal
{public new void Eat(){Console.WriteLine("The dog is eating.");}
}// 在程序中使用
class Program
{static void Main(){Dog dog = new Dog();dog.Eat(); // 输出:The dog is eating.// 通过基类引用调用基类的方法Animal animal = new Dog();animal.Eat(); // 输出:The animal is eating.}
}

在上面的示例中,派生类Dog重新定义了基类Animal中的Eat()方法,并且使用了new关键字。当创建Dog类的实例并调用Eat()方法时,输出的结果是"The dog is eating.“,而不是"The animal is eating.”。这表明派生类中使用了new关键字,隐藏了基类中的Eat()方法。

需要注意的是,基类成员仍然存在,但当通过派生类实例调用时,将会调用派生类中重新定义的成员。而当通过基类引用调用时,将会调用基类中的成员。


在 C# 中,使用 `base` 关键字可以在派生类中访问基类的成员或调用基类的构造函数。
  1. 访问基类的成员:
    使用 base 关键字可以在派生类中访问基类中被隐藏的成员。例如,如果在派生类中重新定义了与基类中同名的成员,可以通过 base 关键字访问基类中的成员。以下是一个简单的示例:

    // 定义基类
    public class Animal
    {public void Eat(){Console.WriteLine("The animal is eating.");}
    }// 定义派生类
    public class Dog : Animal
    {public void Eat(){base.Eat(); // 访问基类的 Eat() 方法Console.WriteLine("The dog is also eating.");}
    }// 在程序中使用
    class Program
    {static void Main(){Dog dog = new Dog();dog.Eat();// 输出:// The animal is eating.// The dog is also eating.}
    }
    

    在上面的示例中,派生类Dog中的Eat()方法通过 base.Eat() 访问基类Animal中的Eat()方法。

  2. 调用基类的构造函数:
    使用 base 关键字还可以在派生类的构造函数中调用基类的构造函数。以下是一个简单的示例:

    // 定义基类
    public class Animal
    {public Animal(string name){Console.WriteLine($"Creating an animal named {name}");}
    }// 定义派生类
    public class Dog : Animal
    {public Dog(string name) : base(name){Console.WriteLine("Creating a dog");}
    }// 在程序中使用
    class Program
    {static void Main(){Dog dog = new Dog("Buddy");// 输出:// Creating an animal named Buddy// Creating a dog}
    }
    

    在上面的示例中,派生类Dog的构造函数中使用了 base(name) 调用基类Animal的构造函数,以便在创建Dog对象时也能对基类进行初始化。

总之,base 关键字在 C# 中用于访问基类的成员或调用基类的构造函数,以便在派生类中能够与基类进行交互。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/641940.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣每日一题 --- 972. 相等的有理数

本题中的一个难点是怎么判断是否相等,如果自己写判断的话是不是很麻烦,判断整数之后再去判断小数部分,那么我们这题的另一个难点就要登场了,第一个难点让本题的情况变得复杂,第二个难点让本题变得很难想到怎么判断&…

如何测试你的 Golang 代码

文章目录 简单概述最易想到的方法一个快速体验案例学会使用 go testing测试的编写规则灵活记忆 API 的使用 实践一个案例简洁紧凑的表组测试详细的日志输出灵活控制运行哪些测试总结参考 不论是开源项目,还是日常程序的开发,测试都是必不可少的一个环节。…

Jtti:云服务与内部部署架构有什么不同?

云服务和内部部署架构是两种不同的计算和服务交付模型。它们在多个方面存在显著的区别,主要涉及资源管理、可扩展性、成本、灵活性等方面。以下是它们之间的主要区别: 资源托管位置: 云服务: 云服务将计算资源(服务器、存储、网络…

STM32-GPIO输出(HAL库)

STM32-GPIO 介绍 什么是GPIO? GPIO(通用输入/输出)是一种用于与外部设备进行数字通信的通用硬件接口。它允许微控制器或其他数字电路的引脚以灵活的方式配置为输入或输出,并在运行时进行动态控制。GPIO可用于连接和控制各种外围…

Java【代码 16】将word、excel文件转换为pdf格式和将pdf文档转换为image格式工具类分享

1.感谢 感谢小伙伴儿的分享: ● 不羁 ● 郭中天 整合调整后的工具类Gitee地址:https://gitee.com/yuanzhengme/java_application_aspose_demo 2.包含的工具类 ● WordToPdfUtil用于将word文档转换为pdf格式的工具类 ● ExcelToPdfUtil用于将excel文档…

C# CefSharp 根据输入日期段自动选择日期

1,前言 搞这个Demo整整搞几天通宵,爆肝了。后做的效果出来,还是不错的。给小伙伴看看效果图。 2, 遇到的问题 日期之间相差多少个月数。开始时间框点击对应月份要点击多少次,结束时间框点击对应月份要点击多少次Xpath获取问题。…

使用NVIDIA TensorRT-LLM支持CodeFuse-CodeLlama-34B上的int4量化和推理优化实践

本文首发于 NVIDIA 一、概述 CodeFuse(https://github.com/codefuse-ai)是由蚂蚁集团开发的代码语言大模型,旨在支持整个软件开发生命周期,涵盖设计、需求、编码、测试、部署、运维等关键阶段。 为了在下游任务上获得更好的精…

MP4是什么文件格式?如何转换视频格式为MP4?

MP4文件格式,全称MPEG-4 Part 14,源自MPEG(Moving Picture Experts Group)对数字媒体压缩标准的不断迭代。其产生背景主要是为了适应数字娱乐时代对更高质量、更高效压缩的需求。MP4文件格式在视频、音频和字幕等多媒体元素的集成…

ps发现一张图片上我有些文字我希望扣出去

问: 上面这是在同一个图层中的,一张图片,但是我希望删除: 剩余__次抽奖这几个文字,怎么办? 回答: 选择 快速选择工具, 讲这几个字括起来, 右键选择删除后填充选区, 就实现了将这几个文字删除,

如何在一个集合对象中A排除另外一个集合对象B中A中拥有的数据通用思路,很精妙!

标题是什么意思呢? 假如我有一个集合对象A,数据有1,2,3,4,5,6 另外一个集合对象B,数据有2,4,5 那么在A中排除B拥有的数据就是 最终需要返回的结果就是1,3 那么我们一般一开始的想法其实就是在集合对象中A遍历取到每一个元素,然…

麒麟linux混血安装kali linux工具集合

因为日常要使用麒麟Linux办公,缺少常见的网络管理软件,尝试麒麟linux混血安装kali linux工具集合。 步骤1: 添加Kali的APT源: echo "deb http://http.kali.org/kali kali-rolling main non-free contrib" | sudo tee…

【吃灰开发板复活】DIY全志V3s随身终端屏幕适配,LVGL以及各种外设驱动移植教程

在上周的文章中介绍了一款因作者想要学习Linux而动手DIY的终端设备V3S-PI, 《梦回2004!我用全志V3s做了个成本100元,功能媲美MP4的随身终端》:梦回2004!我用全志V3s做了个成本100元,功能媲美MP4的随身终端…

[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式

前言: 为什么之前写过Golang 版的设计模式,还在重新写Java 版? 答:因为对于我而言,当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言,更适合用于学习设计模式。 为什么类图要附上uml 因为很…

数据库缓存策略

数据库缓存策略 以下是数据库与缓存的五种常见策略。 1缓存旁路 缓存旁路(Cache-Aside) 在缓存旁路策略中,数据库缓存位于数据库旁边。当应用程序请求数据时,它会首先检查缓存 如果缓存中存在数据(缓存命中&#xff…

c++:string相关的oj题(415. 字符串相加、125. 验证回文串、541. 反转字符串 II、557. 反转字符串中的单词 III)

文章目录 1. 415. 字符串相加题目详情代码1思路1代码2思路2 2. 125. 验证回文串题目详情代码1(按照要求修改后放到新string里)思路1代码2(利用双指针/索引)思路2 3. 541. 反转字符串 II题目详情代码1思路1 4. 557. 反转字符串中的单词 III题目详情代码1&…

逆矩阵举例

考虑一个 22的矩阵A 和其逆矩阵A −1的情况: 要求A的逆矩阵,首先计算A的行列式∣A∣: 如果 ∣A∣≠0, 则 A 可逆,逆矩阵 A −1的计算如下: 举例,考虑矩阵: 计算行列式 ∣A∣(24)−(31)8−35…

精品基于Uniapp+springboot智慧校园管理系统App课程选课成绩

《[含文档PPT源码等]精品基于Uniappspringboot智慧校园管理系统App》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功! 软件开发环境及开发工具: 开发语言:Java 后台框架:springboot、ssm …

leaflet学习笔记-带过滤的图例(九)

前言 图例不只能够帮助我们在查看地图的时候更加方便容易地分辨不同颜色代表的要素,本文要介绍的图例组件还可以按需求过滤掉不用显示的要素,使地图的更能清晰的显示我们需要显示的内容 技术核心 说到过滤要素,第一时间想到的就是滑块组件…

一个大的rosbag数据包怎么分割成一个小的数据包?

文章目录 1. 按时间范围分割:2. 按照消息类型分割:3. 使用split命令:4. 使用Python脚本: 在ROS(机器人操作系统)中, rosbag是一个用于记录和回放ROS主题消息的工具。如果你有一个大的 rosbag数…