C#中多重继承

C#学习日记22---多重继承 继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类来定义一个类,一个类从另一个类派生出来时,派生类从基类那里继承特性          继承的思想实现了 属于(IS-A) 关系。例如,哺乳动物 属于(IS-A) 动物,狗 属于(IS-A) 哺乳动物,因此狗 属于(IS-A) 动物。 基类与派生类:     C#中派生类从他的直接基类继承成员,方法、属性、域、事件 阅读详情


其实想写这篇文章,是因为突然在整理论坛上的帖子的时候,突然发现一个人问我如何才能在C#中实现多重继承,当时我答的很隐晦,因此这里我想补充说明一下.

首先,我要说明一下,C#中是没有类的多重继承这个概念.要使用多重继承必须要通过接口Interface来完成.可是大家都知道Interface实际上就是一个虚函数列表指针.内部封装的只有函数和属性.而且接口(Interface)不能实力化只能通过派生(因为没有构造函数)才可以使用.这一点和抽象类很类似,可是抽象类是个类,他有方法的实现.它所描述的对象是一个无法在现实中具现的对象,但它本身是个类对象.而接口实际上是一种标准.说了这么多,下面我来举一个例子如何在C#中实现多重继承.

 

例子:

using System;

namespace Intdv
{
 /// <summary>
 ///
 /// </summary>
 public abstract class myBase
 {
  public myBase()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //
  }
 }
}

 

using System;

namespace Intdv
{
 /// <summary>
 ///
 /// </summary>
 public class myDerive1 : Intdv.myBase
 {
  string myName;
  public myDerive1()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //

   myName="yarshray";
  }

  public  void ShowMyName()
  {
   Console.WriteLine("my name is :" +  this.myName);
  }

  public void reName(string n)
  {
   myName=n;
  }
 }

public  interface ImyDerive1
 {
 
   void ShowMyName();
 
    void reName(string n);
 }
}


using System;

namespace Intdv
{
 /// <summary>
 ///
 /// </summary>
 public class myDerive2 : Intdv.myBase
 {
  int MyAge;
  public myDerive2()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //

   MyAge=21;
  }

  public void ShowMyAge()
  {
 
   Console.WriteLine("my age is :"+ MyAge);
  }

  public void reAge(int a)
  {
   MyAge=a;
  }
 }

public interface ImyDerive2
 {
 
    void ShowMyAge();
 
    void reAge(int a);
 }
}


using System;

namespace Intdv
{
 /// <summary>
 ///
 /// </summary>
 public sealed class myMDerive : Intdv.myBase, Intdv.ImyDerive1, Intdv.ImyDerive2
 {
  Intdv.myDerive1 d1;
  Intdv.myDerive2 d2;
  public myMDerive()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //
   d1 =new myDerive1();
   d2 =new myDerive2();
  }

 public void ShowMyName(){d1.ShowMyName();}
 public void reName(string n){d1.reName(n);}
 
 public void ShowMyAge(){d2.ShowMyAge();}
 public void reAge(int a){d2.reAge(a);}
 }
}


using System;

namespace Intdv
{
 /// <summary>
 /// Class1 的摘要说明。
 /// </summary>
 class Class1
 {
  /// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  [STAThread]
  static void Main(string[] args)
  {
   //
   // TODO: 在此处添加代码以启动应用程序
   //
   Intdv.myMDerive md=new myMDerive();
   md.ShowMyAge();
   md.ShowMyName();

   md.reAge(22);
   md.ShowMyAge();

   md.reName("saga");
   md.ShowMyName();
  }
 }
}


事例分析,首先我上在一开始定义了一个基类myBase,并派生出了两个派生类分别为myDerive1,myDerive2
这两个类分别定义了一组操作,myDerive1中定义了操作ShowMyName 和 reName 并通过接ImyDerive1加以
描述. myDerive2中定义了操作ShowMyAge 和 reAge 并通过接口ImyDerive2来描述,这样我在多重继承中
只用继承接口也就是ImyDerive1和ImyDerive2就可以保证操作列表的继承,操作的实现通过组合模型.在
接口方法中体现.这里还是从代码来说明,我的派生对象myMDerive(M即多从继承之意),虽然只继承了接口,
可是在构造函数中,却动态分配(New)了myDerive1 和 myDerive2 两个对象.并在操作ShowMyName 等接口继承来的操作中实际调用了myDerive1 和 myDerive2 的操作.由于myDerive1 和 myDerive2 是在
myMDerive内定义的,所以客户端代码(也就是我的主函数)并不需要管理对象的分配和释放(当然在CLR托管
环境中对象的释放一般也并非人为).

由以上例子,可以看出,实现借口留出函数接口具体实现通过组合的方式来实现多重继承中方法体的实现.这样既保证了单一继承父类的唯一性,又保证了多重继承的优点.我个人认为是个很不错的设计方法,并且在我的程序设计中很多地方都采用了该方法.那么好了,就到这里了.下次


 

OpenHarmony系统参数权限配置避坑指南:从param get/set失败到SELinux标签实战 本文深入解析OpenHarmony系统参数权限配置的常见问题与解决方案,涵盖DAC和SELinux双重权限控制机制。通过实战案例演示如何配置`param get/set`权限,解决'Permission denied'错误,并提供三方应用访问参数的安全方案,帮助开发者高效完成系统调试与优化。 阅读详情

相关推荐

Unity线性空间下PSD透明贴图黑边问题:原理分析与三种解决方案

在计算机图形学中,颜色空间转换与Alpha混合是渲染管线的基础环节。伽马空间与线性空间的差异源于显示设备与人眼感知的特性,现代渲染引擎采用线性工作流以实现更真实的光照计算。然而,当图像处理软件(如Photoshop)导出的纹理数据与游戏引擎(如Unity)的预期格式不匹配时,就会引发技术问题,影响视觉保真度与开发效率。具体表现为,在线性空间下进行Alpha Blend混合时,带透明通道的纹理边缘常出现异常黑边或颜色失真,其核心根源在于纹理数据是否经过“预乘”处理与sRGB标记的解读冲突。这一问题的解决对于提

weixin_34198762的博客 380

C#基础知识点总结(三)- 继承

继承:虚方法,多态,隐藏,抽象,密封,派生类构造函数 修饰符:public等 接口 is和as

weixin_43152495的博客 3518

PL端:HDMI 输出实验

开发板没有HDMI编码芯片,是将FPGA的3.3差分IO直接连接到HDMI连接器,FPGA 完成 24 位 RGB 编码输出TMDS 差分信号。1、学会使用第三点IP核,首先是添加,后面的使用和自带IP核操作一致。2、主要还是在梳理vivado使用流程。

qq_43441284的博客 4287

C# 继承(inheritance)

派生类是对基类的扩展,派生类可以添加新的成员,但不能移除已经继承的成员的定义。继承是可以传递的。如果 C 从 B 中派生,B 又从 A 中派生,那么 C 不仅继承了 B 中声明的成员,同样也继承了 A 中声明的成员。构造函数和析构函数不能被继承,除此之外其他成员能被继承。基类中成员的访问方式只能决定派生类能否访问它们...

weixin_47336109的博客 3410

Claude Code VSCode集成开发指南:AI编程助手完整配置

Claude Code与Visual Studio Code的深度集成为开发者提供了强大的AI编程支持。本文详细介绍Claude Code VSCode扩展的安装配置、功能特性和实际应用方法。通过完整的配置流程和代码示例,帮助开发者充分利用Claude AI的智能编程能力。文章涵盖从环境搭建到高级功能应用的完整指南,包括代码自动补全、智能重构、实时代码分析等核心功能的使用技巧,以及与现有开发工作流的整合方案。

2501_93058131的博客 5984

VUE3如何使得大屏自适应的几种方法?

16:9。

weixin_42711805的博客 1万+

C#实现多重继承和实例

举例:SendDtata类的作用是发送数据,ReceiveData类的作用是接收数据,现在要创建SocketData类,作用是发送和接受数据,此时,你希望SocketData从SendDtata和ReceiveData这两个类继承,但CLR不支持多继承,也就意味着C#不支持多继承,但是,CLR允许通过接口Interface实现“缩水版”的多继承。这一点和抽象类很类似,可是抽象类是个类,他有方法的实现,它所描述的对象是一个无法在现实中具现的对象,但它本身是个类型对象。所以,要合理正确地使用多继承。

u011555996的博客 814

实战测评:4大搜索API(You.com/Tavily/Exa/Perplexity)谁更适合你的AI项目?附Python调用代码

本文实战测评了You.com、Tavily、Exa和Perplexity四大搜索API在AI项目中的集成应用,详细对比了它们的技术特性和Python调用方法。针对LLM实时数据需求,You.com的优化设计表现突出,支持32k大上下文窗口和快速响应。文章提供了完整的代码示例和场景化选型建议,帮助开发者高效集成搜索API到AI项目中。

weixin_42569329的博客 479

c#继承

继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类来定义一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。 当创建一个类时,程序员不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基类,这个新的类被称为派生类。 基类的初始化 派生类继承了基类的成员变量和成员方法。因...

330

对称加密中GCM和CBC俩种加密模式的区别

**CBC(Cipher Block Chaining)** 和 **GCM(Galois/Counter Mode)** 是两种常见的对称加密模式。它们的主要区别体现在加密方式、性能和安全性上。

闲人 1109

深入解析MOS管电容特性:从基础理论到高频应用

本文深入解析了MOS管的电容特性,从基础物理结构出发,详细拆解了栅氧电容、重叠电容和结电容的成因与影响。文章重点探讨了电容值随工作状态变化的非线性特性,并分析了其在CMOS高频开关电源、射频电路等应用中的关键作用,包括开关损耗、米勒效应、信号完整性挑战以及如何将电容特性转化为可控元件(如MOS变容管)的机遇。最后提供了从选型、仿真到PCB布局的实战设计指南。

weixin_29278805的博客 382

C# —— 多继承

例如:c类可以继承与a类,a类可以继承b类。但是不能c类即继承于a类,同时继承于b类。接口里面只有声明没有赋值,那个类使用这个接口,就把对应的属性和方法进行实现。3 定义一个Man类 继承于People 同时继承IAnimal接口。C#不支持多重继承,但是可以通过接口实现多重继承。必须实现IAnimal里面的方法和属性。接口: 给类添加一些限制功能。1 : 首先创建一个People父类。2 :定义一个接口interface。4 最后在Main里面进行调用。

一个新人博客,愿多多支持。 1355

告别OFDM卡顿:用MATLAB手把手仿真AFDM波形,搞定高铁、无人机通信的时变信道难题

本文详细介绍了如何使用MATLAB仿真AFDM波形,解决高铁和无人机通信中的时变信道难题。通过仿射变换技术,AFDM在多普勒频移严重的场景下表现优异,显著提升通信质量。文章包含参数配置、波形生成、性能对比等实战内容,适合通信工程师和研究人员参考。

weixin_27014595的博客 319

C#支持多重继承么?

C#支持多重继承么? a. 类之间不支持,接口之间支持 b. 类对接口叫做实现,不叫继承

love_programmer的博客 1102

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C# 通过接口实现多重继承

using System; using System.Collections.Generic; using System.Text; //通过接口实现多重继承 namespace interfaceDemo { class Person {//定义实体类 internal int age; internal string name; ...

不积跬步 无以至千里, 不积小流,无以成江海 1443

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C#多重继承与多继承

C#多重继承与多继承(多层次继承与多父类继承)

best_inh的专栏 2882

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

c#继承、多重继承

c#类 1、c#类的继承 在现有类(基类、父类)上建立新类(派生类、子类)的处理过程称为继承。派生类能自动获得基类的除了构造函数和析构函数以外的所有成员,可以在派生类中添加新的属性和方法扩展其功能。继承的特性: 可传递性:C从B派生,B从A派生,那么C不仅继承B也继承A。 单一性:只能从一个基类中继承,不能同时继承多个基类继承中的访问修饰符base和this关键字基类的构造函数和析构函数不能被...

weixin_30468137的博客 469

c#多重继承

其实想写这篇文章,是因为突然在整理论坛上的帖子的时候,突然发现一个人问我如何才能在C#中实现多重继承,当时我答的很隐晦,因此这里我想补充说明一下. 首先,我要说明一下,C#中是没有类的多重继承这个概念.要使用多重继承必须要通过接口Interface来完成.可是大家都知道Interface实际上就是一个虚函数列表指针.内部封装的只有函数和属性.而且接口(Interface)不能实力化只能通过派

For The Future 1200

C# 面试问题大全:029:C# 支持多重继承吗?

虽然C#不支持传统的多重继承,但它通过接口和抽象类提供了灵活的替代方案来实现类似的功能。通过合理使用接口和抽象类,可以在保持代码清晰性和可维护性的同时,实现复杂的功能需求。

caifox的博客 1335

C#多重继承

myBase.cs ? using System; using System.Collections.Generic; using System.Linq; using System.Text; namespaceIntdv { publicabstract classmyBase { publicmyBase() { // // To do some

normal_cai的专栏 753

C#面:C#支持多重继承么?

然而,C#提供了接口(interface)的概念来实现类似多重继承的功能。一个类可以实现多个接口,从而获得多个接口的特性和行为。接口定义了一组方法、属性和事件的契约,类可以通过实现接口来遵循这个契约,并获得接口中定义的成员。C#不支持多重继承。在C#中,一个类只能直接继承自一个基类。这是由于C#的设计目标之一是避免多重继承可能带来的复杂性和潜在的问题。

那个那个鱼的博客 1082

C#中的多重继承

在C#语言中是没有多重继承功能的,如果我们在项目应用需要用多重继承来实现一些功能的时候,也还是可以做到的,虽然不是太方便。在C#语言中,类是不能多重继承的,但是接口可以多重继承。因此在此实现多继承的原理就是,为每个类建立具有相同方法名的接口,并实现这些接口,然后在子类中继承这些接口,并将实现的类作为子类的字段。 开发环境:VS2005 .NET2.0 项目下载地址:MuiltExtends...

weixin_30886233的博客 302

C++与C#对比学习:多重继承

我们知道C++中类可以多重继承,这也符合现实情况,比如某个绿帽高戴的男同志身边的某位美女可能同时具备几个身份,老婆,小三,孩子他妈.这样的话这位美女得同时继承这三个类.不过由于多继承会有一些缺陷,比如二义性.而且虽然多继承方便直观点,但没有它也不是不行.其实少了类少了面向对象也不是就做不了啥事,像C语言没有类还不是用的好好的.所以啊这个世界上很多事并不是那么必不可不少的.比如你明天光荣牺牲了这个世

weiwenhp 2542

C#如何实现多重继承

C#中是没有类的多重继承这个概念,要使用多重继承必须要通过接口Interface来完成 可是大家都知道Interface实际上就是一个虚函数列表指针.内部封装的只有函数和属性.而且接口(Interface)不能实力化只能通过派生(因为没有构造函数)才可以使用.这一点和抽象类很类似,可是抽象类是个类,他有方法的实现,它所描述的对象是一个无法在现实中具现的对象,但它本身是个类对象。而接口实际上是一种...

陈云佳的专栏 8697

[转]C#中多重继承

原文地址: http://blog.youkuaiyun.com/yarshray/article/details/14824 写的挺不错的,浅显易懂。 其实想写这篇文章,是因为突然在整理论坛上的帖子的时候,突然发现一个人问我如何才能在C#中实现多重继承,当时我答的很隐晦,因此这里我想补充说明一下. 首先,我要说明一下,C#中是没有类的多重继承这个概念.要使用多重继承必须要通过接口Interfac...

weixin_30815469的博客 246
上一篇: 序列化对象(.NET中)
下一篇: 流式媒体
yarshray
博客等级 码龄25年 72粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值