2013-06-29 50 views
0
namespace ScratchPad 
{ 
    public class InterfaceTestBuilder : InterfaceTest1 
    { 
     public InterfaceTestBuilder Init() 
     { 

      return this; 
     } 

     public InterfaceTestBuilder Method1() 
     { 

      return this; 
     } 

     public InterfaceTestBuilder Method2() 
     { 

      return this; 
     } 

     public InterfaceTestBuilder Method3() 
     { 

      return this; 
     } 

    } 

    public interface InterfaceTest1 
    { 
     InterfaceTestBuilder Init(); 
     InterfaceTestBuilder Method3(); 
    } 

    public class Client 
    { 
     public void TestMethod1() 
     { 
      InterfaceTest1 test = new InterfaceTestBuilder(); 

      test.Init(); 
        test.Method3(); 
      test.Init().Method1().Method2().Method3(); 
     } 
    } 
} 

在客户端类具体的方法,在方法链中使用时我的“测试”实例仅限于只是的Init()和方法3()方法,但所有方法都可以访问。我如何使用接口来限制当我希望我的客户端使用方法链时可访问的方法?使用的接口,以暴露的方法中的链

我还要提到的,有可能是另一个接口,仅公开另一组的具体方法:

public interface InterfaceTest2 
{ 
    InterfaceTestBuilder Init(); 
    InterfaceTestBuilder Method1(); 
} 
+0

你以前见过吗? AFAIK这是不可能的。您可以返回不同的类型,然后可以从返回类型链接在一起,但接口是一个公共(或内部)可见合同 –

+0

我以前没有见过这种情况,但我已经实现了一个方法链接构建器,并希望一个接口将是一个更清洁的实现来揭示基于某些条件/场景的方法。我可以通过将我的InterfaceTestBuilder传递给另一个类来使用不同的模式,并通过该类只公开我希望调用者使用的方法。谢谢! – Nventex

回答

0

试着改变方法的返回类型InterfaceTest1

例如,改变你的界面:

public interface InterfaceTest1 
{ 
    InterfaceTest1 Init(); 
    InterfaceTest1 Method3(); 
} 

更改您的InterfaceTestBuilder类实现方法,请执行以下方法:

public InterfaceTest1 Init() 
{ 

    return this; 
} 
public InterfaceTest1 Method3() 
{ 

    return this; 
} 

然后,您将无法进行下面的调用,如调用Method1Init将无法​​访问:

InterfaceTest1 test = new InterfaceTestBuilder(); 

    test.Init().Method1().Method2().Method3(); 
+0

我忘了提及可能有另一个接口向我的客户端公开了一组不同的方法。 – Nventex

+2

@Nventex根据这些提及改变你的问题。 – AgentFire