1

我有一个公共接口,它有两种方法:

public interface IClickStrategy : IStrategy
{
        void InsertSending(MailingResult sending, string connectionString, string tableName);
        void InsertClick(ClickResult click, MailingResult mailing, int campaignId, string              connectionString, string tableName);
}

我有一个实现这个接口函数的类。所以当我实现这些功能时,它们是正确的,但它们当然不是公开的:

void IClickStrategy.InsertSending(MailingResult sending, string connectionString, string tableName){
...
}

我试图从我的课堂上调用这个函数,它给了我一个实际上有意义的错误:

“当前上下文中不存在名称‘InsertSending’。”

我想知道的是如何在我的课堂上使用这些功能?这样做的正确方法是什么?谢谢。

4

3 回答 3

8

问题是您正在使用显式接口实现。你不必那样。你可以写:

public void InsertSending(...)
{
    ...
}

并在其他地方正常调用该方法。但是,如果您使用显式接口实现,则只能通过接口类型的引用而不是您的类类型来调用该方法。所以你可以使用:

IClickStrategy strategy = this;
strategy.InsertSending(...);

就我个人而言,我尽量不使用显式接口实现,除非我有充分的理由这样做——根据我的经验,它往往会使事情变得更加复杂,这只是其中的一个例子。

于 2013-05-31T07:36:58.007 回答
1

一定是

public void InsertSending(MailingResult sending, string connectionString, string tableName){
...
}

在一个类中,它被装饰为实现这个接口。

于 2013-05-31T07:36:42.903 回答
1

一些深思熟虑 - 点击我的参考

“显式接口成员实现有两个主要目的:

因为显式接口成员实现不能通过类或结构实例访问,所以它们允许将接口实现从类或结构的公共接口中排除。当类或结构实现该类或结构的使用者不感兴趣的内部接口时,这特别有用。

显式接口成员实现允许消除具有相同签名的接口成员的歧义。如果没有显式的接口成员实现,则类或结构不可能具有具有相同签名和返回类型的接口成员的不同实现,就像类或结构不可能在具有相同的签名但具有不同的返回类型。"

于 2013-05-31T07:54:07.410 回答