2011-08-31 72 views
0

我有以下情形问题的抽象类,接口,集装箱和方法

我有一个接口

public interface ImyInterface 
{ 
    void myInterfaceMethod(string param); 
} 

我有一个抽象类

public abstract class myAbstractClass 
{ 
    public myAbstractClass() 
    { 
     //something valid for each inherited class 
    } 

    public void myAbstractMethod<T>(T param) 
    { 
     //something with T param 
    } 
} 

我ve一类从myAbstractClass继承并实现ImyInterface

public class myClass : myAbstractClass, ImyInterface 
{ 
    public myClass():base() 
    {} 

    public void ThisMethodWillNeverCall() 
    { 
     // nothing to do 
    }      
} 

最后,我有一个类,我将创建一个ImyInterface对象。在这一点上,我会叫myAbstractMethod,但是......

public class myFinalClass 
{ 
    public void myFinalMethod() 
    { 
     ImyInterface myObj = _myContainer<ImyInterface>(); 

     myObj.??? 

    } 
} 

显然没有这种方法,因为它没有宣布进入界面。 我的解决方案如下

public interface ImyInterface 
{ 
    void myInterfaceMethod(string param); 
    void myFakeMethod<T>(T param); 
} 

public class myClass : myAbstractClass, ImyInterface 
{ 
    public myClass():base() 
    {} 

    public void ThisMethodWillNeverCall() 
    { 
     // nothing to do 
    } 

    //--- a fake method 
    public void myFakeMethod<T>(T param) 
    { 
     base.myAbstractMethod<T>(param); 
    }      
} 

还有没有其他的解决方案比我好?

谢谢!

+1

您为什么认为这是一个问题?如果方法是使用接口的代码所要求的,它应该是接口的一部分。 – Jason

+1

如果你正在使用接口,那么显然这些方法需要在接口上声明。 – dlev

+0

抛弃接口,使用抽象类。 – Will

回答

3

首先,你的命名约定是一团糟。请阅读微软已经提供的guidelines

根据你的例子,很难说出你想要达到什么目的。

回到你的问题:

您应该只访问一个接口与接口工作。不要试图用类/接口来创造任何魔术,让它们一起工作。这通常意味着该类不应尝试实现该接口。

你最好创建一个新的接口,它具有你想要的功能,并让你的类同时实现。

+0

这是一个例子,我尽量写得尽可能简单。谢谢,我会根据你的建议创建一个新的界面。 – Faber