如何写一个类, 继承一个接口, 但不实现其中的方法?

hproof 2012-02-04 11:58:28
interface IFoo
{
void foo();
}
class FooBase : IFoo
{
}
class MyFoo : FooBase
{
void foo()
{
}
}

我的意思是, 在 MyFoo 中才实现接口中的方法, 而不是在 FooBase 中实现. 如何写 FooBase 这个类?
...全文
427 19 打赏 收藏 举报
写回复
19 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
漫天雪飞 2014-08-09
多用组合 少用继承
  • 打赏
  • 举报
回复
hproof 2014-08-09
抱歉由于之前对 C# 不熟悉, 导致提出这样简单的语法问题; 并且由于工作繁忙, 没有及时结贴。 提这个问题的初衷, 好像是这样的情况: IFoo 中函数的个数非常多 FooBase 只实现少数函数, 其它函数因为没有实现, 不想多费力气去写一个空函数。 所以是想问下, 有没有类似 abstract class FooBase : IFoo 这样的写法, 就可以不用实现所有函数了。 这种 函数个数非常的的 IFoo 接口, 只是以前的一个设想, 并没有在实际工作中使用到。 而且这么复杂的接口本身, 也不符合简单即美的设计原则了。
  • 打赏
  • 举报
回复
showjancn 2012-02-06
楼主本身就设计错误。

可变为:
interface IFoo
{
void foo();
}
class FooBase
{
}
class MyFoo : FooBase, IFoo
{
void foo()
{
}
}
  • 打赏
  • 举报
回复
淘淘大师 2012-02-06
如果类FooBase不实现IFoo中的方法为什么要继承呢?MyFoo中才实现IFoo中的方法,那就直接继承好了

class MyFoo : FooBase, IFoo
{
void foo()
{
}
}
  • 打赏
  • 举报
回复
mrsupersky 2012-02-06
[Quote=引用 8 楼 mj_dangerous 的回复:]

继承接口的类必须实现接口的方法。继承类的类则不需要。
C# code

interface IFoo
{
void foo();
}
class FooBase : IFoo
{
public virtual void foo(){}
}

class MyFoo : FooBase
{
……
[/Quote]
+
加virtual 关键字可以不实现该方法 的方法体
而继承的类就可以override覆盖该方法
  • 打赏
  • 举报
回复
hao_wen123 2012-02-06
可以添加个抽象类实现接口 然后用继承抽象类
  • 打赏
  • 举报
回复
Alden 2012-02-06
如果真的不用,那只能说明你的接口设计有问题,不妨将现有接口拆分成两个.
  • 打赏
  • 举报
回复
欢乐的小猪 2012-02-06
[Quote=引用楼主 hproof 的回复:]
interface IFoo
{
void foo();
}
class FooBase : IFoo
{
}
class MyFoo : FooBase
{
void foo()
{
}
}

我的意思是, 在 MyFoo 中才实现接口中的方法, 而不是在 FooBase 中实现. 如何写 FooBase 这个类?
[/Quote]
或者你把接口IFoo组合到FooBase类中
class FooBase
{
IFoo interface;
}
  • 打赏
  • 举报
回复
如果不想实现接口,就不要继承接口
或者你可以把你的接口进行拆分,实现多接口继承
  • 打赏
  • 举报
回复
五更琉璃 2012-02-06
"如何写一个类, 继承一个接口, 但不实现其中的方法? "
这已经不符合接口的定义了...
  • 打赏
  • 举报
回复
EnForGrass 2012-02-06
看看什么是接口,怎么继承接口(实现方法)
  • 打赏
  • 举报
回复
MJ_dangerous 2012-02-06
继承接口的类必须实现接口的方法。继承类的类则不需要。

interface IFoo
{
void foo();
}
class FooBase : IFoo
{
public virtual void foo(){}
}

class MyFoo : FooBase
{

  • 打赏
  • 举报
回复
请用测试驱动的基本思维来看到编程,不要为了一些语法概念而编程。
  • 打赏
  • 举报
回复
我读程序就好象读小说一样,总是首先假设它是有实际意义的,除非要删除它。

当你写一个代码的接口,你就是去搞设计,而不是为了炫耀什么接口概念。你在定义上写了借口,OK,你就应该拿出这个接口相关的测试程序来测试它。如果你的测试出错了,你还是偷偷收拾起测试而不让别人知道你出现了异常、而你写的代码也还是提交给别人吗?

那么对不起,请离开我们的团队。
  • 打赏
  • 举报
回复
康康 2012-02-05
没明白你的用意何在? 继承接口一般都是实现接口的方法的。
  • 打赏
  • 举报
回复
threenewbee 2012-02-05
虽然不能完全实现你要的功能。
但是你可以变通:在IFoo上点那个蓝色的线,选择实现接口。

Visual Studio 会为你生成空方法,里面丢出 NotImplementedException 异常,表明这个方法没有实现。

你也可以手写这样的代码:
class FooBase : IFoo
{
public void foo() { throw new NotImplementedException(); }
}
  • 打赏
  • 举报
回复
“在 MyFoo 中实现接口中的方法”,那你就应该写

class MyFoo : FooBase, IFoo
{
void foo()
{
}
}
  • 打赏
  • 举报
回复
class FooBase
{
}

这样写!你写的什么,就说明了什么。你写了它实现接口,结果又要不实现,这岂不是火星上的文字了嘛。
  • 打赏
  • 举报
回复
相关推荐
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2012-02-04 11:58
社区公告

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