作者leicheong (睡魔)
看板C_Sharp
标题Re: [问题] 不能多重继承的话,这问题怎麽解?
时间Sat Aug 21 22:27:05 2010
※ 引述《SDNiceBoat (NiceBoat.)》之铭言:
: 例如:
: class A:
: {
: public virtual void FunA()
: {
: //----------
: }
: }
: class B:List<A>,A ← 会出错,因为不能多重继承
: {
: public override void FunA()
: {
: foreach(A a in this)
: {
: a.FunA();
: }
: }
: }
: ====================================================
: 主要是希望能把B class 放进另一个B class当中
: 让他可以变成巢状结构
: 请问该怎麽做?
: 虽然可以用介面去解
: 但万一里面的东西一多的话,会有一堆重复的程式码.....
: 实作起来跟之後要修改都会很麻烦....
你需要的是default property...
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
public class A
{
public virtual void FuncA()
{
}
}
public class B : A
{
protected List<A> _item;
// 这里看你想这样还是implement一堆forwarder
// 把List<A>中需要的method expose出来
public List<A> CollA
{
get
{
return this._item;
}
}
public A this[int index]
{
get
{
return this._item[index];
}
set
{
this._item[index] = value;
}
}
}
}
--
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.92.4.195
※ 编辑: leicheong 来自: 61.92.4.195 (08/21 23:33)
1F:推 SDNiceBoat:可是,我是想直接把List的功能继承下来,而不是重新写 08/22 00:53
2F:→ SDNiceBoat:重新写List的工作会比继承介面的方法来的浩大...... 08/22 00:54
3F:推 SDNiceBoat:总而言之,还是谢谢回答 08/22 01:00
4F:→ leicheong:那没解了, 你看XmlNode也是用一堆Interface来做的. 08/22 09:25
5F:→ leicheong:这也算是简化语言结构的代价吧... (就像functional 08/22 09:27
6F:→ leicheong:programming不能直接转写某些常用pattern一样) 08/22 09:28
7F:推 SDNiceBoat:了解了 感谢..... 08/22 11:32