如何在自己的类中调用接口方法?

时间:2010-11-22 10:18:44

标签: c# interface methods

My MySqlConnection类实现IDatabaseConnection接口。在更新方法中,我想调用connect()但是找不到这个方法,我怎么称它为?

class MySqlConnection : IDatabaseConnection
{
    void IDatabaseConnection.connect()
    {
        ...
    }

    void IDatabaseConnection.update()
    {         
        connect(); // here
        ...
    }
}

5 个答案:

答案 0 :(得分:7)

显然你正在使用显式接口实现,除了你的语法不正确(你不能在其上指定访问修饰符)。

要调用该方法,只需将this投射到IDatabaseConnection

void IDatabase.update(){

    ((IDatabase)this).connect();
 ...
}

答案 1 :(得分:4)

您可以使用:

(this as IDatabase).connect();

原因是您明确地实现了此接口,因此您只能在转换后调用这些方法。为什么要明确地实现它并制作这些方法private?我认为连接类更常见的是public connectupdate方法。

答案 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