C#多重继承

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

?
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
namespaceIntdv 
{ 
publicabstract classmyBase 
{
publicmyBase() 
{
//
// To do something here
//
}
}
} 

  myDerive1.cs

?
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
namespaceIntdv 
{ 
classmyDerive1 : Intdv.myBase 
{
stringmyName; 
publicmyDerive1() 
{
//
// To do something here
//
myName ="yarshary"; 
}
publicvoid ShowMyName() 
{
Console.WriteLine("my name is: "+ this.myName);
}
publicvoid reName(stringn) 
{
myName = n;
}
}
publicinterface ImyDerive1
{
voidShowMyName(); 
voidreName(stringn); 
}
} 

  myDerive2.cs

?
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
namespaceIntdv 
{ 
publicclass myDerive2:Intdv.myBase
{
intMyAge; 
publicmyDerive2() 
{
//
// To do something here
//
MyAge = 21;
}
publicvoid ShowMyAge() 
{
Console.WriteLine("my age is:"+ MyAge); 
}
publicvoid reAge(inta) 
{
this.MyAge = a;
}
}
publicinterface ImyDerive2
{
voidShowMyAge(); 
voidreAge(int a); 
}
} 

  myMDerive.cs

?
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
namespaceIntdv 
{ 
publicsealed classmyMDerive:Intdv.myBase, Intdv.ImyDerive1, Intdv.ImyDerive2
{
Intdv.myDerive1 d1;
Intdv.myDerive2 d2;
publicmyMDerive() 
{
//
// To do something here
//
d1 =new myDerive1();
d2 =new myDerive2();
}
publicvoid ShowMyName() 
{
d1.ShowMyName();
}
publicvoid reName(stringn) 
{
d1.reName(n);
}
publicvoid ShowMyAge() 
{
d2.ShowMyAge();
}
publicvoid reAge(inta) 
{
d2.reAge(a);
}
}
} 


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

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

myBase.cs

?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Intdv
{
public abstract class myBase
{
public myBase()
{
//
// To do something here
//
}
}
}

  myDerive1.cs

?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Intdv
{
class myDerive1 : Intdv.myBase
{
string myName;
public myDerive1()
{
//
// To do something here
//
myName = "yarshary" ;
}
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);
}
}

  myDerive2.cs

?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Intdv
{
public class myDerive2:Intdv.myBase
{
int MyAge;
public myDerive2()
{
//
// To do something here
//
MyAge = 21;
}
public void ShowMyAge()
{
Console.WriteLine( "my age is:" + MyAge);
}
public void reAge( int a)
{
this .MyAge = a;
}
}
public interface ImyDerive2
{
void ShowMyAge();
void reAge( int a);
}
}

  myMDerive.cs

?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Intdv
{
public sealed class myMDerive:Intdv.myBase, Intdv.ImyDerive1, Intdv.ImyDerive2
{
Intdv.myDerive1 d1;
Intdv.myDerive2 d2;
public myMDerive()
{
//
// To do something here
//
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);
}
}
}

  

事例分析,首先我上在一开始定义了一个基类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托管
环境中对象的释放一般也并非人为).

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

C#实现多继承的三种方法(附完整源码) 阅读详情

相关推荐

C#基础教程19 接口与多继承

csharpCopy code// 接口成员的定义接口成员可以是方法、属性、事件或索引器。接口成员在定义时不能包含访问修饰符,因为接口成员默认为公共的。csharpCopy code该接口定义了两个成员:GetArea() 和 Draw() 方法。这些方法没有实现,因为接口只提供了成员的特征。接口是 C#中一种重要的抽象类型。接口定义了一组方法、属性和事件的特征,类和结构可以实现一个或多个接口,并实现接口中定义的所有成员。

qq_45800365的博客 684

C# —— 多继承

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

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

C#接口多继承的写法

INotifyCreated.Created和INotifyOwnerChanged.OnOwnerChanged就是两个不同接口,这种情况下,由于接口众多,那么出现接口函数命名重复的机率就会增多,导致编译不通过。这时就需要改写接口时,把接口名字也要写上去。由于接口继承比较多,那么在写代码的时候要注意什么呢?在这里看到这个类,它总共继承了5个接口。在函数的前面都写上了接口的名称。

大坡3D软件开发 648

C#中类的继承和实现多态的三种方法

访问修饰符 class 子类名称:父类名称//构造方法:方法名与类名一样,无返回类型 //创建对象的时候自动执行一次 public Person() {Console . WriteLine("PS:创建一个人的实例");//student是子类 person是父类 //从父类继承了成员和方法 } static void Main(string [ ] args) {//类的使用:创建他的对象实例 Person p = new Person();运行代码结果如下关键字virtual。

xxxiaoshu的博客 3571

C#中实现多继承的方法

近日看到了一个贴子,就是在C#语言中,如何实现多继承的问题。相信涉猎c#不多的人(像我这样的菜鸟),一看就觉得很可笑,c#肯定是不能实现多继承的啊。都知道在c++中因为实现多继承会有很多的歧义问题,所以在c#中就把多继承给取消了,而用接口来实现!但是想想,如果是初学者肯定不会不会问这样的问题。肯定是个高手,然后就开始上网查资料!然后发现真的可以实现! 说起多继承,首先大家可以想想这个问题:你知道在C#中怎么实现多继承吗? 主流的答案无非2种。 答案一:用接口啊,一个类可以继承自多个接口的。 答案二:C#不支持多继承,C++才支持多继承,多继承会让代码变得很乱,因此微软在设计C#的时候放弃了多继

jane street market prediction 冠军方案 奇巧淫技与topline链接整理(3/3)

目录前言将income 作为loss(优化目标)读取数据,定义优化目标模型训练与微调提交结果多目标学习Topline整理AE+MLP (rank10)Current 17th solution: Ensembles of deep (49 layer) MLPsmixup augmentation: a way to learn from trades with weight=0 (rank4)My (perhaps) over-complicated LSTM solutionCurrent 62nd .

weixin_51484067的博客 2640

C#中多重继承

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

何双江(yarshray)的专栏 6491

英飞凌功率MOSFET SPICE 瞬态仿真不收敛问题解决(基于TINA)

英飞凌功率MOSFET SPICE仿真容易出现不收敛问题,这个对于IGBT和SIC的管子应该是一样的,在瞬态仿真分析中,出现如下图所示的报错,Convergence problem。spice是为线性电路设计的,例如运算放大器、线性电源等,不是专门仿真开关电路的。在瞬态仿真时,仿真器是要不断迭代求解的,开关快速的跳变,容易在迭代式出现不收敛的问题。,由于时间步长减少,会消耗更多的计算机内存,如果运行多次内存消耗过大,会报“Out of memory”.解决方法是:报错工程,重启软件,内存重新计算。

miaoxiaokeji的博客 2299

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

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

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

永磁同步电机功率计算实战:从公式到避坑指南(附Excel计算模板)

本文详细解析永磁同步电机(PMSM)功率计算的实战技巧,涵盖三维参数体系、三相与单相系统差异、动态工况补偿及常见计算陷阱。特别提供Excel计算模板,帮助工程师快速准确完成功率计算,避免工业应用中的常见错误,提升工作效率。

x8y9z0的博客 807

C# Code-Behind 技术全面解析

Code-Behind 是 ASP.NET Web Forms 中的一种技术模式,通过将用户界面标记(.aspx文件)与程序逻辑代码(.aspx.cs文件)分离,实现表现层与逻辑层的解耦。其核心思想是前端展示与后台逻辑的物理文件分离,通过ASP.NET编译器将两者合并编译成一个Page类并执行。Code-Behind 的优势包括较好的代码组织、较高的开发效率,尤其适合快速开发数据驱动应用。然而,与现代开发模式如ASP.NET MVC、ASP.NET Core和Blazor相比,Code-Behind 在可维

记录学习的过程 958

C#支持多重继承么?

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

love_programmer的博客 1102

Ubuntu18.04 SoftRoCE安装教程

目标:创建两台Ubuntu18.04虚拟机,安装SoftRoCE环境,一台作为Server,一台作为Client,模拟RDMA通信环境,熟悉RDMA的通信方式。

GGGYL111的博客 1551

c#继承、多重继承

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

weixin_30468137的博客 469

Allan方差这个工具,怎么把它用的更顺手?(附Allan方差、动态Allan方差代码)

本文详细说明了Allan方差和动态Allan方差的计算过程,并通过递归运算和时间序列选择两种算法提高动态Allan方差的计算效率。文末提供了快速动态Allan方差计算代码。

victoryqian528的博客 374

用 SAP S/4HANA Configure Predefined Custom Fields 玩转预定义自定义字段:从概念到实战

SAP预定义自定义字段配置指南:安全扩展业务模型的云原生方案 摘要: 本文系统介绍SAP S/4HANA Cloud中预定义自定义字段的配置方法,对比普通自定义字段与预定义字段的区别,阐述其技术特点与业务价值。重点解析"Configure Predefined Custom Fields"应用的核心功能,包括字段元数据配置、多语言支持、UI集成等能力,并通过业务伙伴扩展案例演示完整实施流程。文章指出预定义字段方案在云环境下的独特优势:既满足业务扩展需求,又能保证系统可升级性,是SaaS环

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 81

c#多重继承

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

For The Future 1200

华为Ascend C算子开发能力认证(中级)(个人记录,有完整代码,已通过认证,仅供参考)

本文介绍了在昇腾NPU环境下实现Sigmoid算子的完整流程。首先需要在华为云ModelArts-Notebook或开发者套件上搭建环境,要求CANN版本为8.0.0.beta1。主要内容包括:1)实现SigmoidCustom算子的kernel侧核函数代码;2)完成host侧Tiling结构体实现;3)支持Float16数据类型。代码实现部分详细展示了核函数计算流程、数据拷贝和牛顿迭代优化方法。最后介绍了编译部署流程,包括环境配置、代码上传、编译执行等步骤,并提供了提交规范说明。该实现通过调用Ascend

qq_73044452的博客 1109

C#多重继承与多继承

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

best_inh的专栏 2882

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

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

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

caifox的博客 1335

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

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

那个那个鱼的博客 1082

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C#中的多重继承

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

weixin_30886233的博客 302

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

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

weiwenhp 2542

[转]C#中多重继承

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

weixin_30815469的博客 246
上一篇: static,const,auto各个关键字的作用域和用法
下一篇: 朋友,请不要焦虑
normal_cai
博客等级 码龄18年 12粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值