OOP的基础问题

NoReady 2005-05-13 02:36:31
有一段代码:1个抽象类,1个接口,1个实现类。大家看看有什么问题?是否能编译通过?为什么?
-----------------------------
using System;

namespace Sample
{
/// <summary>
/// DAO接口
/// </summary>
public interface IProjectDao
{
/// <summary>
/// 向Project表中插入记录
/// </summary>
void Insert();
}

/// <summary>
/// DAO基类
/// </summary>
public abstract class BaseDAO
{
public void DoSomething()
{

}
}

/// <summary>
/// DAO子类,实现DAO接口。
/// </summary>
public class B : BaseDAO, IProjectDao
{
void IProjectDao.Insert()
{
}

public void OtherMethod()
{
this.Insert();
}
}
}
...全文
150 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
NoReady 2005-05-14
  • 打赏
  • 举报
回复
谢谢 bflovesnow() ,我查了MSDN后,是有区别,把MSDN原文贴上,如有其它兄弟再遇上这种情况,可方便查看:
MSDN中的解释如下:
---------------------------
实现接口的类可以显式实现该接口的成员。当显式实现某成员时,不能通过类实例访问该成员,而只能通过该接口的实例访问该成员。
bflovesnow 2005-05-13
  • 打赏
  • 举报
回复
但是我经过测试,
void IProjectDao.Insert()
{
}
这样实现不会错的啊。


------------------------------------
这样是不错,但在另一个方法里用 this 引用它就是你的不对了 :)
bflovesnow 2005-05-13
  • 打赏
  • 举报
回复
hehe,显式实现接口的问题!

因为显式实现的接口成员是属于该类的,不能用该类的实例访问,也就是不能用 this 访问!

看 MSDN 中显式实现接口成员的详细介绍。
sadfleg 2005-05-13
  • 打赏
  • 举报
回复
bang ding
NoReady 2005-05-13
  • 打赏
  • 举报
回复
TO xiaoniaofei(xiaoniao) :

但是我经过测试,
void IProjectDao.Insert()
{
}
这样实现不会错的啊。

xiaoniaofei 2005-05-13
  • 打赏
  • 举报
回复
void IProjectDao.Insert()
{
}

接口不能这样实现!

改成:public void Insert(){}

应该没有 问题!
NoReady 2005-05-13
  • 打赏
  • 举报
回复
但我不知道,像我原先那样子写法有什么错?
NoReady 2005-05-13
  • 打赏
  • 举报
回复
呵呵,panda2fw2(我爱Monkey) 和 hedonister(冰戈V2.0) 的说法是对的。
sayo 2005-05-13
  • 打赏
  • 举报
回复
不会,惭愧,请楼主明示
hedonister 2005-05-13
  • 打赏
  • 举报
回复
试了
public class B : BaseDAO ,IProjectDao
{

public void OtherMethod()
{
this.Insert();
}

public void Insert()
{
// TODO: 添加 B.Insert 实现
}

}

这样可以,呵呵
hedonister 2005-05-13
  • 打赏
  • 举报
回复
肯定不行,public class B要实现IProjectDao必须

这样
public class B:IProjectDao
{
}

panda2fw2 2005-05-13
  • 打赏
  • 举报
回复
/// <summary>
/// DAO子类,实现DAO接口。
/// </summary>
public class B : BaseDAO ,IProjectDao
{

public void OtherMethod()
{
this.Insert();
}

public void Insert()
{
// TODO: 添加 B.Insert 实现
}

}
这样就可以了
Fibona 2005-05-13
  • 打赏
  • 举报
回复
this.Insert();
wwg_yuyin 2005-05-13
  • 打赏
  • 举报
回复
帮你顶
hujiiori 2005-05-13
  • 打赏
  • 举报
回复
不能编译,,,这句啥意思
void IProjectDao.Insert()
{
}
Fibona 2005-05-13
  • 打赏
  • 举报
回复
通不过


sadfleg 2005-05-13
  • 打赏
  • 举报
回复
没看出什么问题

111,098

社区成员

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

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

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