三、C#面向对象编程(继承与多态)

在C#中,面向对象编程(OOP)是编程的基本范式,它使用类和对象的概念来构建软件应用程序。面向对象编程的三个主要特性是封装、继承和多态。

  1. 封装:封装是将数据(属性)和操作数据的函数(方法)捆绑到一个独立的实体(对象)中。这样做可以隐藏对象的内部状态,并提供一种控制对象外部代码访问该状态的方式。

    public class Car
    {public string Model { get; set; }public int EngineCapacity { get; set; }public void StartEngine(){Console.WriteLine("Engine started.");}
    }
    
  2. 继承:继承是子类自动获得父类所有非私有属性和方法的能力。子类可以添加或覆盖父类的成员。通过继承,可以创建更具体的类,从更一般的类中继承属性和方法。

    public class Engine
    {public void Start(){Console.WriteLine("Engine started.");}
    }public class Car : Engine // Car类继承自Engine类
    {public string Model { get; set; }public int EngineCapacity { get; set; }
    }
    
  3. 多态:多态意味着一个接口可以有多种实现方式,或者父类引用可以指向子类对象。多态允许程序在运行时确定对象的具体类型,并据此调用相应的方法。多态性是通过方法重写、接口实现和委托实现的。

    interface IShape 
    {void Draw();
    }class Circle : IShape 
    {public void Draw() {Console.WriteLine("Drawing Circle...");}
    }class Rectangle : IShape 
    {public void Draw() {Console.WriteLine("Drawing Rectangle...");}
    }class Program
    {static void Main(string[] args) {IShape shape1 = new Circle(); // 引用类型为Circle的IShape对象 IShape shape2 = new Rectangle(); // 引用类型为Rectangle的IShape对象 shape1.Draw(); // 输出 "Drawing Circle..." shape2.Draw(); // 输出 "Drawing Rectangle..." }
    }
    

    在上面的例子中,IShape接口定义了一个Draw方法,CircleRectangle类都实现了这个接口。在Main方法中,我们创建了CircleRectangle类的实例,并分别通过IShape接口的引用进行调用。由于多态性,程序在运行时根据实际对象的类型来调用相应的方法。
    除了接口,委托也是实现多态性的一种方式。委托是一种类型安全的函数指针,允许你指向具有相同签名的任何方法。

public delegate void MyDelegate(string message);public class Program
{public static void Main(string[] args){MyDelegate del = new MyDelegate(ShowMessage);del("Hello World"); // 输出 "Hello World"del = new MyDelegate(ShowMessage2);del("Hello C#"); // 输出 "Hello C#"}public static void ShowMessage(string message){Console.WriteLine(message);}public static void ShowMessage2(string message){Console.WriteLine($"{message.ToUpper()} C#");}
}

在这个例子中,我们定义了一个名为MyDelegate的委托,它接受一个字符串作为参数。Main方法中创建了两个委托实例,一个指向ShowMessage方法,另一个指向ShowMessage2方法。当我们通过委托调用方法时,会根据实际指向的方法来执行相应的逻辑。

多态性是面向对象编程中非常强大的特性,它允许我们编写更灵活、可扩展的代码,并能够以更自然的方式表达现实世界中的概念。通过使用继承和接口,我们可以构建具有共同特性的类层次结构,并通过多态性在不同的类实例上执行相同的操作,而具体实现可以在运行时确定。

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

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

相关文章

大数据学习(31)-Spark非常用及重要特性

&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主哦&#x1f91…

项目中接入神策埋点

项目中接入神策埋点(免费),react和vue通用 1、下包 使用npm 或 yarn 或 pnpm 安装依赖 npm install --save sa-sdk-javascript 2、初始化准备: 定义环境变量 VITE_PROJECT_ENV (prod demo test) 3、初始化神策 在 utils 文…

QT基础知识

QT基础知识 文章目录 QT基础知识1、QT是什么2、Qt的发展史3、为什么学习QT4、怎么学习QT1、工程的创建(环境的下载与安装请百度)2、创建的工程结构说明3、怎么看帮助文档1、类使用的相关介绍2. 查看所用部件(类)的相应成员函数(功…

为什么说 $mash 是 Solana 上最正统的铭文通证?

早在 2023 年的 11 月,包括 Solana、Avalanche、Polygon、Arbitrum、zkSync 等生态正在承接比特币铭文生态外溢的价值。当然,因铭文赛道过于火爆,当 Avalanche、BNB Chain 以及 Polygon 等链上 Gas 飙升至极值,Arbitrum、zkSync 等…

多任务并行处理相关面试题

我自己面试时被问过两次多任务并行相关的问题: 假设现在有10个任务,要求同时处理,并且必须所有任务全部完成才返回结果 这个面试题的难点是: 既然要同时处理,那么肯定要用多线程。怎么设计多线程同时处理任务呢&…

.babky勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

导言: 网络安全威胁不断进化,其中.babky勒索病毒引起了广泛关注。这篇文章91数据恢复将深入介绍.babky的狡猾特征,以及在遭受其袭击时如何高效地恢复被加密的数据,并提供实用的预防方法。当面对被勒索病毒攻击导致的数据文件加密…

基于Java课程作业管理系统

基于Java课程作业管理系统 功能需求 1、作业发布:系统需要支持教师发布作业,包括作业题目、要求、截止日期等信息。 2、作业提交:学生可以通过系统提交作业,系统需要支持多种文件格式的上传,并能够自动保存提交记录…

vue-vuex持久化处理

在src/utils文件夹下,创建storage.js文件 // 约定一个通用的键名 const INFO_KEY hm_shopping_info// 获取个人信息 export const getInfo () > {const defaultObj { token: , userId: }const result localStorage.getItem(INFO_KEY)return result ? JSON…

proteus元器件搜索

proteus元器件搜索 常用元器件类 电阻:Resistor 可变电阻:Variable Resistor 电位器 :potentiometer 三极管:在Transistors里查找,可以用指定的型号搜索,比如2N3904。也可使用npn和pnp查找。 二极管&…

Linux 网络系统管理 技能大赛 DNS赛题配置

主DNS服务部署 yum -y install bind bind-chroot bind-utils systemctl start named //开启named systemctl enable named //开机自启动 ss -tnl |grep 53 //查看端口是否正常启动 vim /etc/named.conf //编辑全局配置文件listen-on port 53 {any;}; //监听所有…

java多线程及线程锁

概述 程序(program):为完成特定任务,用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。 进程(process):程序的一次执行过程,或是正在内存中运行的应用程序…

什么是自动化测试?为啥要学自动化测试?

什么是自动化测试,接着对常用的自动化测试框架进行了对比分析,最后,介绍了如果将自动化测试框架Cypress运用在项目中。 一、自动化测试概述 为了保障软件质量,并减少重复性的测试工作,自动化测试已经被广泛运用。在开…

C++ 字符串操作说明 续

一、strstr函数 extern char *strstr(char *str1, const char *str2); 1. strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。 2. str1: 被查找目标 string …

【LLM】大型语言模型综述论文

今天我将与大家分享一篇精彩的论文。这项调查提供了LLM文献的最新综述,这对研究人员和工程师来说都是一个有用的资源。 为什么选择LLM? 当参数尺度超过一定水平时,这些扩展的语言模型不仅实现了显著的性能改进,而且还表现出一些…

一文掌握 Golang 中的类型断言

目录 什么是类型断言 类型断言的基本语法 类型断言示例 类型断言原理 类型断言的使用场景 深入理解类型断言 类型断言的最佳实践 小结 类型断言是 Golang 中的一个非常重要的特性,使用类型断言可以判断一个接口的实际类型是否是预期的类型,以便进…

一份阅读量13万+免费的C#/.NET/.NET Core面试宝典(基础版)

前言 C#/.NET/.NET Core相关技术常见面试题汇总,不仅仅为了面试而学习,更多的是查漏补缺、扩充知识面和大家共同学习进步。该知识库主要由自己平时学习实践总结、网上优秀文章资料收集(这一部分会标注来源)和社区小伙伴提供三部分…

c++编程要养成的好习惯

1、缩进 你说有缩进看的清楚还是没缩进看的清楚 2、i和i i运行起来和i更快 3、 n%20和n&1 不要再用n%20来判断n是不是偶数了&#xff0c;又慢又土&#xff0c;用n&10&#xff0c;如果n&10就说明n是偶数 同理&#xff0c;n&11说明n是奇数 4、*2和<<…

【EI会议征稿通知】第三届工程管理与信息科学国际学术会议 (EMIS 2024)

第三届工程管理与信息科学国际学术会议 (EMIS 2024) 2024 3rd International Conference on Engineering Management and Information Science 【国际高级别专家出席/新加坡机器人学会支持】 第三届工程管理与信息科学国际学术会议 (EMIS 2024)将于2024年4月12-14日在中国洛…

设计模式:工厂方法模式(讲故事图文易懂)

目录 简单工厂工厂方法模式 简单工厂 定义&#xff1a;简单工厂由一个工厂根据参数类型决定创建哪种产品的实例。 简单工厂不包含在23种设计模式之内&#xff08;简单工厂不满足开闭原则&#xff0c;后面会详细讲&#xff09; 举例&#xff1a;张三去4S店买了车&#xff0c;显…

网页爬虫对于网络安全有哪些影响?

在当今信息爆炸的时代&#xff0c;网络已经成为人们获取信息、交流思想和开展业务的重要平台。然而&#xff0c;随着网络的普及和技术的不断发展&#xff0c;网络安全问题也日益凸显&#xff0c;其中网页爬虫对网络安全的影响不容忽视。本文将就网页爬虫对网络安全的影响进行深…