gpt4 book ai didi

c# - 实现多个通用接口(interface) - 类型错误

转载 作者:太空狗 更新时间:2023-10-30 00:09:03 26 4
gpt4 key购买 nike

我正在尝试做这样的事情:

public interface IRepository<T>
{
T Get<T>(int id);
}

public interface IFooBarRepository : IRepository<Foo>, IRepository<Bar>
{
}

IFooBarRepository repo = SomeMethodThatGetsTheActualClass();
Foo foo = repo.Get<Foo>(1);

我收到警告:

类型参数“T”与外部类型“IRepository”中的类型参数同名

还有一个错误:

以下方法或属性之间的调用不明确:“IRepository.Get(int)”和“IRepository.Get(int)”

关于如何让这个模式发挥作用有什么想法吗?

最佳答案

要调用合适的表达式,您需要让编译器以合适的方式考虑表达式:

IFooBarRepository repo = SomeMethodThatGetsTheActualClass();
IRepository<Foo> fooRepo = repo;
Foo foo = fooRepo.Get(1);

请注意,您可以将其转换为一条语句:

IFooBarRepository repo = SomeMethodThatGetsTheActualClass();
Foo foo = ((IRepository<Foo>)repo).Get(1);

...但这对我来说看起来很丑陋。

处理调用方法。 在一个类中实现两个接口(interface)是下一个障碍...因为它们在参数方面具有相同的签名。您必须至少明确实现其中一项 - 如果您同时实现这两项,可能会减少混淆:

public class FooBarRepository : IFooBarRepository
{
Foo IRepository<Foo>.Get(int id)
{
return new Foo();
}

Bar IRepository<Bar>.Get(int id)
{
return new Bar();
}
}

编辑:您还需要制作 Get非泛型方法:当前您正在尝试重新声明类型参数 TIRepository<T>.Get<T> ;您只想使用 IRepository<T>现有 类型参数.

关于c# - 实现多个通用接口(interface) - 类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3782143/

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