关于接口继承中的一点疑惑!

如一宝宝 2011-06-05 05:32:04

public abstract class AppenderSkeleton : IAppender, IBulkAppender, IOptionHandler

这是log4net源码中的一个抽象类,大致的意思是日志附加器的核心类,
我发现他实现了3接口IAppender、IBulkAppender、IOptionHandler;

当我点击IBulkAppender接口定义时,我表示我困惑了;

public interface IBulkAppender : IAppender


这是不是有点多此一举?我刚接触OOP语言时,老师就告诉我接口的实现类具有该接口及父接口的所有行为,
为何AppenderSkeleton 要重复指明它实现了IAppender?

求解!

...全文
110 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
如一宝宝 2011-06-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sp1234 的回复:]
让我们反过来举一个例子。比如原来有“I收音机”这样一个接口,现在发现需要扩展为“I收音机_版本2”接口(扩展的意思就是说它也实现“I收银机”接口),而用来产生对象实例的类型是具有“I收音机_版本2”接口的新型收银机。显然虽然我们让新的对象具有全新收银机的功能,可是它就是不能放到原来放到“I收银机”的程序里去多态地运行了。你必须为这个新的类型重复声明一下它还是实现“I收银机”接口。

使用接口就……
[/Quote]

多谢指教
拿凤姐抵债 2011-06-08
  • 打赏
  • 举报
回复
接口怎么没有继承性呢?
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
ttt t = new ttt();
source2 s2 = t;
source s = t;
s2.runA();
s2.runB();
s.runA();
}
}
interface source
{
void runA();
}
interface source2 : source
{
void runB();
}
class ttt : source2
{
#region source2 成员

public void runB()
{
MessageBox.Show("B");
}

#endregion

#region source 成员

public void runA()
{
MessageBox.Show("A");
}
#endregion
}
  • 打赏
  • 举报
回复
让我们反过来举一个例子。比如原来有“I收音机”这样一个接口,现在发现需要扩展为“I收音机_版本2”接口(扩展的意思就是说它也实现“I收银机”接口),而用来产生对象实例的类型是具有“I收音机_版本2”接口的新型收银机。显然虽然我们让新的对象具有全新收银机的功能,可是它就是不能放到原来放到“I收银机”的程序里去多态地运行了。你必须为这个新的类型重复声明一下它还是实现“I收银机”接口。

使用接口就要记住它没有继承性。
  • 打赏
  • 举报
回复
假设声明
public abstract class AppenderSkeleton : IBulkAppender, IOptionHandler
,由于接口没有继承性质,那么虽然实现了IBulkAppender的class必然也实现了IAppender所需要的全部东西,可是它就是没有实现IAppender接口。
xieyang702 2011-06-05
  • 打赏
  • 举报
回复
不明白啊
快乐大法师 2011-06-05
  • 打赏
  • 举报
回复
拿凤姐抵债 2011-06-05
  • 打赏
  • 举报
回复
我的理解,
应该有如下用途
1 看着方便,这个我们在Windows自己定义的类里面常用,一看就知道继承了什么接口。
2 使用显式接口定义函数。就是
public void IAppender.Abc()
{
MessageBox.Show("IAppender.abc");
}
public void IBulkAppender.Abc()
{
MessageBox.Show("IBulkAppender.abc");
}
不一定对啊,也没有试过的。
如一宝宝 2011-06-05
  • 打赏
  • 举报
回复
没人,还是大家都在过节!

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧