如何将接口转换为其子接口?

Inn*_*nno 0 .net c# refactoring

想象你有以下接口:

public interface IInterfaceA : IInterfaceX
{
    //
    // declarations
    //
}

public interface IInterfaceB : IInterfaceX
{
    //
    // declarations
    //
}

public interface IInterfaceC : IInterfaceX
{
    //
    // declarations
    //
}
Run Code Online (Sandbox Code Playgroud)

现在我想用一个函数替换以下三个执行几乎相同的方法:

class SomeClass
{
    IInterfaceA myVarA;
    IInterfaceB myVarB;
    IInterfaceC myVarC;

    void SomeMethodA(IInterfaceX someVarX)
    {
        myVarA = (IInterfaceA)someVarX;
    }

    void SomeMethodB(IInterfaceX someVarX)
    {
        myVarB = (IInterfaceB)someVarX;
    }

    void SomeMethodC(IInterfaceX someVarX)
    {
        myVarC = (IInterfaceC)someVarX;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想到了类似的东西:

void SomeMethod(IInterfaceX targetVar, IInterfaceX someVarX)
{
    //
    // here's my problem
    //
    targetVar = (CastIDontKnowHowToPerform)someVarX;
}
Run Code Online (Sandbox Code Playgroud)

这是用过的...... 喜欢

SomeMethod(myVarA, someVarX);        
SomeMethod(myVarB, someVarX);        
SomeMethod(myVarC, someVarX);        
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

  • 我想要的是可能的吗?

  • 如何执行此演员我不知道如何演出?

  • 也许设计模式更合适

我只是想通过用一个函数替换它们来寻找重构这三个函数的最佳方法.

到目前为止我尝试过的事情:我使用了像object.GetType()和object.GetType()这样的东西.GetInterfaces()可以很好地获取对象或其接口的类型但是没有设置类型它的接口的一个对象.

希望你能帮我...

问候,

英诺

[编辑] 啊,该死的...在点击"提出你的问题"并简要看一下之后,这似乎是泛型函数(或C++中的模板 - 术语)的典型案例. [/编辑]

Jam*_*ran 9

void SomeMethod<T>(out T targetVar, IInterfaceX someVarX) where T: IInterfaceX
{
       targetVar = (T) someVarX;
}
Run Code Online (Sandbox Code Playgroud)