C#多态浅析

C#多态详解 定义 why? what? How? 实现多态的两个要素 案例 使用多态的好处 String类 阅读详情

在C#语言中多态称为运行时多态,也就是在程序运行时自动让父类的实例调用子类中重写的方法,它并不是在程序编译阶段完成的。

使用继承实现多态,实际上是指子类在继承父类后,重写了父类的虚方法或抽象方法。 在创建父类的对象指向每一个子类的时候,根据调用的不同子类中重写的方法产生了不同的执行效果。总而言之,使用继承实现多态必须满足以下两个条件。子类在继承父类时必须有重写的父类的方法。在调用重写的方法时,必须创建父类的对象指向子类(即子类转换成父类)。

实例根据不同层次(本科生、研究生)的学生打印出不同的专业要求。根据题目要求,创建专业信息的抽象类(Major),并在其中定义学号(Id)、姓名(Name),以及打印专业要求的抽象方法(Requirenwnt)。分别使用本科生和研究生类继承专业信息类,并重写其中的打印专业要求的方法。实现的代码如下。

class Program
{
static void Main(string[] args)
{
Major major1 = new Undergraduate();
major1.Id = 1; major1.Name = “张晓”;
Console.WriteLine(“本科生信息:”);
Console.WriteLine(“学号:” + major1.Id + “姓名:” + major1.Name);
major1.Requirement();
Major major2 = new Graduate();
major2.Id = 2; major2.Name = “李明”;
Console.WriteLine(“研究生信息:”);
Console.WriteLine(“学号:” + major2.Id + “姓名:” + major2.Name);
major2.Requirement();
Console.ReadLine();
}
}

abstract class Major
{
public int Id { get; set; }
public string Name { get; set; }
public abstract void Requirement();
}

Class Undergraduate :Major
{
public override void Requirement()
{
Console.WriteLine(“本科生学制4年,必须修满48学分”);
}
}

class Graduate : Major
{
public override void Requirement()
{
Console.WriteLine(“研究生学制3年,必须修满32学分”);
}
}

如下图所示
在这里插入图片描述
从上面的执行效果可以看出,创建父类的实例指向了不同的子类,在程序运行时会自动调用子类中重写后的方法内容,显示出本科生和研究生的要求信息。

c# 多态 多态的定义:就是同一个事物在不同情况呈现来的不同的状态 满足多态的条件:(1)具有继承或者实现的关系、(2)子类对父类要有方法重写、(3)父类引用指向子类对象 我们先看看“多态”到底是什么玩意? 阅读详情

相关推荐

Dify 实战:2小时本地部署与 AI Agent 工作流构建指南

这次我们来看一个能让你快速上手 AI 应用开发的开源平台——Dify。它不是某个单一的模型,而是一个集成了模型编排、工作流设计、知识库管理和 Agent 开发能力的“AI 应用工厂”。对于想从零开始构建 AI 应用,但又不想深陷于复杂代码和底层 API 调用的开发者来说,Dify 提供了一个低门槛的图形化解决方案。 它的核心价值在于,将复杂的 AI 能力(如大语言模型调用、知识库检索、函数调用等)封装成可视化的节点,让你通过拖拽连线的方式,就能搭建从简单问答到复杂业务流程的各类应用。无论是想快速验证一个

weixin_30908941的博客 409

C#关于多态性的详细讲解

多态性在C#中的重要性总结多态性是面向对象编程的重要特性之一,它允许不同对象对同一消息做不同的响应,提高了代码的灵活性和重用性。在C#中,多态性可以通过继承与重写、抽象类与接口、委托与泛型等机制来实现,为我们提供了丰富的编程手段。多态性的优势和限制多态性使得代码更加灵活、可扩展和可维护,可以提高代码的质量和效率。然而,过度使用多态性可能会导致代码过于复杂,降低代码的可读性和可理解性。因此,在使用多态性时需要权衡利弊,根据具体的情况选择合适的实现方式。对未来多态性发展的展望和建议。

仰望星空的博客 2675

[C#]利用接口实现多态浅析

所谓的多态性,个人认为说的是相同的程序接受几段毫不相同的参数而能正常的运行。而在C#中利用接口实现多态性我觉得并不是太严谨。我认为要真正实现多态性离不开泛型。 举个小例子: public interface Iinter { publi

hsppl的专栏 2093

C#中的多态

C#语言三大特性:继承,封装,多态 一:多态多态是指一个行为具有多个不同表现形式的能力,在C#中通过多态性的检测时机可以分为静态多态性和动态多态性静态多态性:函数重载和运算符重载 动态多态性:抽象方法、重写方法、隐藏方法 二:函数重载(overlode) ——函数名必须相同 ——函数参数类型不同 ——函数参数个数不同 ——函数参数顺序不同 三:抽象(abstract) —...

L的博客 4427

C#多态

C#多态C#多态性分为静态多态性和动态多态性。 一、静态多态性 在编译时,函数和对象的连接机制被称为早期绑定,也被称为静态绑定。C# 提供了两种技术来实现静态多态性。分别为: 1.函数重载 2.运算符重载 1.函数重载 可以在同一个范围内对相同的函数名有多个定义。函数的定义必须彼此不同,可以是参数列表中的参数类型不同,也可以是参数个数不同。不能重载只有返回类型不同的函数声明。 本质上是为使同一个类的方法在不同输入下能产生不同的输,在类里面定义了数个不同内容(可能是输入的参数类型不同或输入的参数个数

qq_42805758的博客 3659

浅析c#多态的实现(修正版)

多态是面向对象的三个基本特性之一,因此在C#中正确理解和实现多态是非常重要的。 对于C#初学者而言,可能已经理解了多态的概念,但对于多态的实现,特别是关键字new,virtual,override的使用,仍然有种一头雾水的感觉。我查阅几本书,在网上看了一些相关的资料,总算是小有收获,在这里分享一下我的理解,希望对初学者有所帮助。 多态可以简单的理解为对不同的对象调用相同的方法,表现不...

weixin_30273763的博客 143

C#浅析接口与抽象基类-学习总结

C#浅析接口与抽象基类--学习总结 1. 个性大于共性。 2. 差异较大的个性间具有某些相同的行为。 3. 相同行为的实现方式有较大区别。 开门见山: 当在差异较大的对象间寻求功能上的共性时,使用接口。 当在共性较多的对象间寻求功能上的差异时,使用抽象基类。 接口案例: //======================================...

TimTiny的博客 931

c#浅析接口(interface)与抽象类(abstract)的区别

在学习c#接口(interface)和抽象类(abstract)的时候 发现接口和抽象类极为相似,比如说:继承后都需要重写,或者都不能通过new关键字来实例化… ,那么他们之间到底有什么区别与联系 ? 一、接口的特征 ​ 1、接口使用interface关键字声明 ​ 2、接口中的成员有属性、方法、事件,索引器并且都没有实现部分,可以说是没有方法体 ​ 3、接口中不能声明字段,接口中的成员不能使用任何修饰符 ​ 4、继承接口的类或结构必须隐式或显式实现接口中的所有成员 ​ 5、一个接口允许...

Peter的博客 1万+

C#继承和派生

用户在程序中会遇到 this 和 base 关键字,this 关键字代表的是当前类的对象,而 base 关键字代表的是父类中的对象。 方法隐藏和重写方法有区别吗? class Program { static void Main(string[] args) { A a1 = new B(); a1.Print(); //A A a2 = new C(); a2.Print(); //C } } class A { .

weixin_42715287的博客 1714

多态和接口---C#

前言:最近收到的博客评论说我的内容太多,还有就是转化成自己的理解,于是就接受了这个建议。把每个知识点细化来分析。感觉这样学习也非常棒。这篇博客浅析一下多态和接口。 (一)多态 1.是什么 多态就是对象可以表现对各类型的能力。 2.有什么 ①子类和父类的关系 子类和父类方法名相同解决方案: 一:在子类方法修饰符后面加New 二:在父类的方法修饰符后面加上virtual 在子类中...

Stephanie翟倩 654

php中的多态性,PHP 5.0中多态性的实现方案浅析

四、PHP 5中的迟绑定依我的看法,迟绑定正是使得Java和C#如此引人注目的重要原因。它们允许基类方法用"this"或$this来调用方法(即使它们不存在于基类中或调用一个基类中的方法,它有可能为继承类中的另一个版本所代替)。你可以认为如下的实现在PHP中是允许的:<?phpclass Person{function AddFeedback($messageArray) {$this->Pars...

weixin_39624774的博客 127

c# 委托浅析

委托 当需要把方法传递给其他方法时,就需要用到委托,委托本身是一个继承了多播委托的类。那么为何需要传递一个方法? 方法就是参数,逻辑,返回值,如果我们要编写一个通用的集合,插入可以编写,但是查找,删除,修改,排序这些方法如果想要写的灵活,就需要支持用户自己编写的代码,支持用户以对象的某一个属性就行查找删除修改。比如说下面的代码。 static void Main(string[] args) { List<Student> studentList = new...

h1311454244的博客 243

c#浅析接口(interface)

c#浅析接口(interface) c#接口是一个让很多c#初学者容易迷糊的东西,但是它有什么用处呢?如何使用呢?来让我们一起来谈谈究竟吧! 1、什么是接口 ​ (1)接口定义了所有类继承接口时应遵循的语法合同。接口定义了语法合同 “是什么” 部分,派生类定义了语法合同 “怎么做” 部分。其实,接口简单理解就是一种约定,使得实现接口的类或结构在形式上保持一致。 ①是什么部分: ​ 接口只包含了成员的声明。也就是说接口只声明,类或结构一旦继承,那么就要按照结构声明的东西,重写接口中的所有数据,这就像是

abraham_ly的博客 1633

C#系列之多态

可以自己选择是否保留父类的特征,public 和override顺序并不重要,只有Const必须在访问修饰符后面。多态按字面的意思就是多种状态,让继承同一父类的子类们,在执行相同方法时有不同的表现(状态)base是否使用看实际需求,保留父类行为。虚函数一定是与函数重写配对使用的。虚函数,重写,父类base(调用父类构造函数),抽象函数,接口。主要目的:同一父类的对象,执行相同行为(方法)有不同的表现。解决的问题:让同一个对象有唯一行为的特征。目前我们学习过的多态——函数重载。

2303_76354097的博客 378

C#多态

C#中的多态是指一个实体可以有多种形态。

m0_61730047的博客 608

【超详细】C#基础-面向对象三大特性:多态

今天来详细学习一下C#面向对象的三大特性:多态多态(Polymorphism)是面向对象编程(OOP)中的一个核心概念,它允许对象以不同的方式表现不同的行为。通过多态,子类可以在继承父类的方法时,修改或扩展父类的行为,甚至在运行时决定调用哪个类的方法,这使得程序更加灵活和可扩展。多态有两种主要形式:1)编译时多态(静态多态):主要通过方法重载和方法隐藏来实现。2)运行时多态(动态多态):主要通过方法重写和接口实现来实现。方法重写是指子类重写父类的虚方法或抽象方法

grapefruit_lyy的博客 1962

C#实现多态的三种方法

在上述示例中,Animal类是基类,Cat和Dog类是Animal类的子类。基类Animal中定义了一个虚方法MakeSound,而子类Cat和Dog通过重写这个方法来实现自己的特定行为。基类Animal中定义了一个虚方法MakeSound,而子类Cat和Dog通过重写这个方法来实现自己的特定行为。在C#中,接口实现多态是通过接口实现类的方式实现的。通过创建不同类型的对象,可以调用相应类型的方法,实现多态。通过创建不同类型的对象,可以调用相应类型的方法,实现多态。来修饰方法,表示该方法是对基类方法的重写。

blu_e__heart的博客 2358

C#基础详解】(十五)面向对象 多态

学习面向对象多态、虚方法、抽象类、接口、综合练习完成超市收银系统

伯恩的博客 1113
上一篇: C#数组介绍
下一篇: C#virtual关键
从入门到学废
博客等级 码龄8年 8粉丝 · 55原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值