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();
}
}
}
...全文
117 点赞 收藏 17
写回复
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日
没看出什么问题
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.5w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告