类继承接口的问题

maroon 2008-07-17 01:45:57
代码如下:
using System;

interface IStorable
{
void Read();
void Write();
}

interface ITalk
{
void Talk();
void Read();
}

public class Document : IStorable, ITalk
{
// the document constructor
public Document(string s)
{
Console.WriteLine("Creating document with: {0}", s);

}

public virtual void Read()
{
Console.WriteLine("Implementing IStorable.Read");
}

public void Write()
{
Console.WriteLine("Implementing IStorable.Write");

}

void ITalk.Read()
{
Console.WriteLine("Implementing ITalk.Read");
}

public void Talk()
{
Console.WriteLine("Implementing ITalk.Talk");
}

}

public class Note : Document
{
public Note(string s):
base(s)
{
Console.WriteLine("Creating Note with: {0}", s);
}

public override void Read()
{
Console.WriteLine("Implementing Document.Read");
}

//在这里想重写Document类的ITalk.Read()
void ITalk.Read()
{
Console.WriteLine("Implementing Document.Read");
}
}

public class Tester
{

static void Main()
{
// create a document object
Document theDoc = new Document("Test Document");
IStorable isDoc = theDoc as IStorable;
if (isDoc != null)
{
isDoc.Read();
}

ITalk itDoc = theDoc as ITalk;
if (itDoc != null)
{
itDoc.Read();
}

theDoc.Read();
theDoc.Talk();

//--------------
Note n = new Note("N");
n.Read();
//--------------
Console.ReadLine();
}

}


不明白的地方在这,请指教,谢谢.

//在这里想重写Document类的ITalk.Read()
void ITalk.Read()
{
Console.WriteLine("Implementing Document.Read");
}

...全文
97 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
maroon 2008-07-19
  • 打赏
  • 举报
回复
up
maroon 2008-07-17
  • 打赏
  • 举报
回复
谢谢楼上的朋友,特别是hbxtlhx ,你的方法可以实现了,不过只能这样写代码了吗?非要在Note中加上ITalk?
chinaicm 2008-07-17
  • 打赏
  • 举报
回复
interface ITalk
{
void Talk();
void Read();
}

把Read() 换个命名 ReadByTalk()

基类存在两个同名方法,继承类无法重写这两个同名的方法.
北京的雾霾天 2008-07-17
  • 打赏
  • 举报
回复
1:可以在调用上这样做:(n as ITalk).Read();
2:对类Note进行改写:

public class Note : Document, ITalk
{
public Note(string s)
:
base(s)
{
Console.WriteLine("Creating Note with: {0}", s);
}

public override void Read()
{
(this as ITalk).Read();
}

#region ITalk 成员

//在这里想重写Document类的ITalk.Read()
void ITalk.Read()
{
Console.WriteLine("Implementing Document.Read");
}
fuadam 2008-07-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 maroon 的回复:]
这样写会出错.

override void ITalk.Read()
{
Console.WriteLine("Implementing Document.Read");
}


错误 1 修饰符“override”对该项无效 C:\Documents and Settings\nh\My Documents\Visual Studio 2005\Projects\ExplicitImplementation\ExplicitImplementation\Program.cs 67 19 ExplicitImplementation
[/Quote]
override 对应 virtual修饰词,还有接口的集成规则和类的继承规则不太相同
maroon 2008-07-17
  • 打赏
  • 举报
回复
这样写会出错.

override void ITalk.Read()
{
Console.WriteLine("Implementing Document.Read");
}


错误 1 修饰符“override”对该项无效 C:\Documents and Settings\nh\My Documents\Visual Studio 2005\Projects\ExplicitImplementation\ExplicitImplementation\Program.cs 67 19 ExplicitImplementation
ericzhangbo1982111 2008-07-17
  • 打赏
  • 举报
回复
override void ITalk.Read()
{
Console.WriteLine("Implementing Document.Read");
}

110,017

社区成员

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

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

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