多重接口问题

dr_lou 2007-01-26 10:41:48
namespace ConsoleApplication2
{
interface Imy1
{
void disp1();
void disp2();
}

interface Imy2
{
void disp2();
}

class Program : Imy1,Imy2
{
public void disp1()
{
Console.WriteLine("1");
}
public void disp2()
{
Console.WriteLine("2");
}

static void Main(string[] args)
{
Program p = new Program();
p.disp1();
p.disp2();
}
}
}

类Program的disp2实现了那个接口?
...全文
164 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinglong6511 2007-01-26
  • 打赏
  • 举报
回复
学习
magicsnake 2007-01-26
  • 打赏
  • 举报
回复
2个同时实现.
说白了接口只是限制你必须要有一个实现函数,在编译期间会帮你检查关系.但是真正使用实例的时候,只关心实例对象所拥有的方法,并不关心这个方法是从那里来的.
北京的雾霾天 2007-01-26
  • 打赏
  • 举报
回复
当你在类的声明中使用Imy1及Imy2且在类的实现上添加了它们所对应的接口成员的时候,在编译器看来就是实现了这两个接口,而不会是说
public void disp1(){}

public void disp2(){}
是属性哪个接口的.
superxiaomm 2007-01-26
  • 打赏
  • 举报
回复
接口只是一个声明,告诉系统你是怎么看待这个对象的。
dr_lou 2007-01-26
  • 打赏
  • 举报
回复
两个接口都有disp2
我在类program里只写了一段代码 就重写了2个接口的方法么?
北京的雾霾天 2007-01-26
  • 打赏
  • 举报
回复
两个接口都是实现了的.
测试如下:
static void Main(string[] args)
{
Program p = new Program();
p.disp1();
p.disp2();

System.Console.WriteLine(p is Imy1);
System.Console.WriteLine(p is Imy2);
}
分别输出:
1
2
true
true
兔子-顾问 2007-01-26
  • 打赏
  • 举报
回复
不懂IL。谁翻译成IL给个标准答案
dr_lou 2007-01-26
  • 打赏
  • 举报
回复
namespace ConsoleApplication2
{
interface Imy1
{
void disp1();
void disp2();
}

interface Imy2
{
void disp2();
}

class Program : Imy1,Imy2
{
public void disp1()
{
Console.WriteLine("1");
}
void Imy1.disp2()
{
Console.WriteLine("1.2");
}

void Imy2.disp2()
{
Console.WriteLine("2.2");
}

static void Main(string[] args)
{
Program p = new Program();
p.disp1();
Imy1 m1 = p;
m1.disp2();
Imy2 m2 = p;
m2.disp2();
}
}
}

110,539

社区成员

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

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

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