My MySqlConnection类实现IDatabaseConnection
接口。在更新方法中,我想调用connect()
但是找不到这个方法,我怎么称它为?
class MySqlConnection : IDatabaseConnection
{
void IDatabaseConnection.connect()
{
...
}
void IDatabaseConnection.update()
{
connect(); // here
...
}
}
答案 0 :(得分:7)
显然你正在使用显式接口实现,除了你的语法不正确(你不能在其上指定访问修饰符)。
要调用该方法,只需将this
投射到IDatabaseConnection
:
void IDatabase.update(){
((IDatabase)this).connect();
...
}
答案 1 :(得分:4)
您可以使用:
(this as IDatabase).connect();
原因是您明确地实现了此接口,因此您只能在转换后调用这些方法。为什么要明确地实现它并制作这些方法private
?我认为连接类更常见的是public
connect
和update
方法。
答案 2 :(得分:2)
显式接口实现:
class MySqlConnection : IDatabaseConnection
{
void IDatabaseConnection.connect()
{
//
}
void IDatabaseConnection.update()
{
(this as IDatabaseConnection).connect();
}
}
更好 - 隐式接口实现:
class MySqlConnection : IDatabaseConnection
{
public void connect()
{
//
}
public void update()
{
connect();
}
}
答案 3 :(得分:0)
这称为显式接口实现。但如果你像这样编写你的课程,它会正常工作:
class MySqlConnection : IDatabase
{
public void connect()
{
...
}
public void update()
{
connect(); // here
...
}
}
请注意,这些方法是作为公共方法实现的。
显式实现使它们无处不在,即使在类本身内也是如此。这就是为什么在声明它们时不能使用private
关键字的原因。但是,它们仍然可以通过界面“公开”访问。如果出于某种原因你真的想要使用显式实现,你可以转换到接口并从那里调用:
((IDatabase)this).connect();
答案 4 :(得分:0)
这里似乎存在一些问题 - 您的MySqlConnection没有实现IDatabase接口,但是您在该接口中明确实现了一个方法?
这可能有所帮助 - 我可能误解了你想要实现的目标。
http://msdn.microsoft.com/en-us/library/aa288461(VS.71).aspx