c#多重继承
来源:互联网 发布:51单片机助手破解版u币 编辑:程序博客网 时间:2024/05/21 07:14
其实想写这篇文章,是因为突然在整理论坛上的帖子的时候,突然发现一个人问我如何才能在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#中多重继承
- C#多重继承
- c#多重继承
- C#中多重继承
- C#接口浅谈(多重继承)
- C#中接口多重继承的注意事项
- C#中接口多重继承的注意事项
- c#利用接口实现多重继承
- C#中接口多重继承的注意事项
- C#中接口多重继承的注意事项
- C++与C#对比学习:多重继承
- C#学习日记22---多重继承
- 多重继承
- 多重继承
- 多重继承
- 多重继承
- 多重继承
- 消息调度
- Hibernate从入门到精通(一)JDBC简介 .
- USB学习
- Android源码编译步骤总结
- NOIP 2011 普及组 第3题 瑞士轮
- c#多重继承
- 数组赋值练习,求数组当中的最大值
- 关于python学习路线
- Oracle数据库建某字段全文全文检索
- Windows下安装androguard
- 数据挖掘之处理分类自变量与处理时间变量
- linux head命令
- java设计模式---单例模式
- ios 常用第三方库