1

我想根据下面描述的上下文/场景来了解在 C# 中显式实现接口的含义。可以说我有以下界面

public interface ITestService
{
    void Operation1();
    void Operation2();
}

假设我显式地实现了接口,如下所示,是否可以使用任何方式从 Operation1() 调用 Operation2()?

public sealed class TestService : ITestService
{
    public TestService(){}

    void ITestService.Operation1()
    {
        // HOW WOULD ONE SUCCESSFULLY INVOKE Operation2() FROM HERE. Like:
        Operation2();
    }

    void ITestService.Operation2()
    {

    }
}

发生什么不同(在包装下)以允许下面声明不同的 testService1 和 testService2 表现不同?

static class Program
{
    static void Main(string[] args)
    {
        ITestService testService1 = new TestService();      
        testService1.Operation1(); // => Works: WHY IS THIS POSSIBLE, ESPECIALLY SINCE Operation1() AND Operation2() WOULD BE *DEEMED* private?
        // *DEEMED* since access modifiers on functions are not permitted in an interface

        // while ...
        TestService testService2 = new TestService();
        testService2.Operation1(); //! Fails: As expected
    }
}
4

2 回答 2

1
void ITestService.Operation1()
{
    ((ITestService)this).Operation2();
}

至于你的第二个问题:

接口的所有成员都是公共的。因此,实施也将是公开的。

于 2012-07-05T10:57:51.823 回答
1

对于你的第二个问题

testService1.Operation1(); // => 有效:为什么这可能,特别是因为 Operation1() 和 Operation2() 会被视为 私有?

因为接口中的函数是公共的,你可以调用它们。此外,您已经显式实现了接口方法,您不能针对类对象调用它。例如

TestService ts = new TestService();
ts.Operation1();// this would cause an error

您可能会看到:显式接口实现(C# 编程指南)

于 2012-07-05T11:01:30.713 回答