【发布时间】:2023-01-11 21:57:04
【问题描述】:
所以,这可能看起来与其他同名问题类似——但我找不到解决我所遇到的特定问题的方法。如果已经有解决方案,请随时链接解决方案。
背景:
我有这个方法需要接受一个通用接口作为参数类型(因为其他对象也需要调用这个函数)
我已经简化了问题,不包括问题的确切细节,因为它是机密的。我已将其替换为动物。动物类型下面是一个狐狸,猫, ETC...
IDefinition<T> 对象是一个接口,包含要传入的任何 Animal 的任何定义。
我面临的“问题”不完全是一个阻塞问题,这有效,但它使用的是一个标准,我不会太舒服地使用..
它涉及创建 DefinitionOfFox 的实例,将其用作类的实例以调用类的方法,然后将此实例作为参数传递给该方法,因为该方法进一步需要它。正如预期的那样,这工作正常(将DefinitionOfFox作为IDefinition<T>类型传递),但我想重构它,所以我不会将DefinitionOfFox对象传递给DefinitionOfFox类......而是DefinitionOfFox 类自己创建实例。
当前状态
public class Fox : Animal {
public void Init()
{
DefinitionOfFox definition = new DefinitionOfFox();
definition.Method1<Fox>(this, definition);
}
}
public class DefinitionOfFox : IDefinition<Fox>
{
public void Method1<T>(T typeOfAnimal, IDefinition<T> definition)
{
OtherService otherService = new OtherService();
otherService.Method2<T>(typeOfAnimal, definition);
}
}
在当前状态下一切正常,但它不适合我将类实例作为参数传递给它自己的类。
理想状态
public void Init()
{
DefinitionOfFox definition = new DefinitionOfFox();
definition.Method1<Fox>(this);
}
public class DefinitionOfFox : IDefinition<Fox>
{
public void Method1<T>(T typeOfAnimal)
{
DefinitionOfFox definition = new DefinitionOfFox();
OtherService otherService = new OtherService();
otherService.Method2<T>(typeOfAnimal, definition);
}
}
OtherService类和Method2注意事项此方法必须从 DefinitionOfFox 类调用,而不是从 Fox 类调用。
public class OtherService
{
public void Method2<T>(T typeOfFox, IDefinition<T> definition)
{
}
}
当我试图将它传递给 OtherService.Method2() 方法时,我得到了 definition 的编译器错误。它抱怨无法将 DefinitionOFox 转换为 IDefinition<T>。
为什么这在当前状态下有效,但在理想状态下却无效?有没有办法让我拥有理想状态?它是传递给方法的同一个对象,它只是在不同的时间创建的。
错误说参数 2:无法从 ....DefinitionOfFox 转换为 ....IDefinition
如果这没有意义,我可以详细说明 - 没问题。让我知道
谢谢你的时间!
【问题讨论】:
-
你能加一个完整的minimal reproducible example吗?
-
OtherService.Method2(typeOfAnimal, definition);为什么不能是OtherService.Method2(typeOfAnimal, this);? -
@Fildor 我认为这是由于泛型而发生的。
-
你能展示方法的定义吗
OtherService.Method2? -
@GuruStron 哈哈,对。错过了那部分。
标签: c# generics reflection interface