gpt4 book ai didi

c# - 实现包含抽象/接口(interface)类型参数的抽象/接口(interface)方法

转载 作者:太空宇宙 更新时间:2023-11-03 19:48:28 26 4
gpt4 key购买 nike

我有两个接口(interface):

public interface IController
{
void doSomething(IEntity thing);
}

public interface IEntity { ... }

一个示例实现是:

public class ControllerImplA : IController
{
public void doSomething(IEntity entity)
{
EntityImplA entityForA = (EntityImplA)entity;
...
}
}

public class EntityImplA : IEntity { ... }

ControllerImplA.doSomething()entity 参数将始终为EntityImplA。同样,ControllerImplB.doSomething()entity 参数将始终为 EntityImplB,其他实现依此类推。

有没有办法避免在我当前的代码中使用向下转换?换句话说,我想做这样的事情:

public class ControllerImplA : IController
{
public void doSomething(EntityImplA entity) { ... }
}

不修改接口(interface)?如果使用抽象父类而不是接口(interface)呢?

最佳答案

您想使用泛型。修改接口(interface)是使它变得干净的唯一方法:

public interface IController<T> where T : IEntity
{
void doSomething(T thing);
}

然后:

public class ControllerImplA : IController<EntityImplA>
{
public void doSomething(EntityImplA entity)
{
...
}
}

但是,如果您真的无法更改界面,例如它由第三方库提供,然后@dasblinkenlight 的解决方法与您将要获得的一样干净。

关于c# - 实现包含抽象/接口(interface)类型参数的抽象/接口(interface)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42559911/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com