我想要做的是定义一个泛型类型ClassB<TA>
,该类型将接受TA
类型参数分配给实现泛型接口的任何类型,IInterfaceA<TB>
但以任何方式[接口定义允许],无论TB
已传递给它的类型参数 ( IInterfaceA
)在TA
实施中。我还希望能够访问由定义中使用的特定实现TB
实际传递给接口的类型参数 () 。这在 C# 中可能吗?如果是,那么正确的语法是什么?IInterfaceA
TA
ClassB<TA>
例如,类似以下的内容(我希望虽然看似说明性但不是特别有用)但在语法和语义上是正确的:
public interface IInterfaceA<TB>
{
TB TheProperty {get; set;}
}
public class ClassB<TA> where TA : IInterfaceA<TB>
{
TA TheProperty {get; set;}
TB ThePropertyProperty => TheProperty.TheProperty;
}
更新:到目前为止,我实际上已经采取了以下方式(在决定询问是否可能存在更好的方式之前),包括TB
(IInterfaceA
类型参数)本身的定义,ClassB
但我仍然很好奇是否ClassB
可以定义方式这将只允许所有IInterfaceA
实现并以一种隐式方式派生/导入IInterfaceA
类型参数(不是 100% 确定,但似乎实际上具有逻辑明确(非模棱两可)的强类型意义,同时增加了我的代码可重用性,这就是我猜到这样的原因一个特性有机会实际存在)。
public class ClassB<TA, TB> where TA : IInterfaceA<TB>
{
TA TheProperty {get; set;}
TB ThePropertyProperty => TheProperty.TheProperty;
}
更不用说美学/可读性、可维护性、消除对针对略有不同情况的逻辑类似物的复制粘贴定义的需求等)。提到的替代解决方案意味着明确定义什么是相当直接的,以便由编译器明确地计算出来(至少在相同的接口没有使用不同类型参数实现两次的情况下,感谢@vyrp 强调了歧义的可能性多重实现案例)给定使用上下文(我认为这不仅是一种更方便的方式,而且更不容易出错)并限制了通用代码重用的机会。我相信这句话可以解释为什么一个不那么冗长的替代方案 提到的替代解决方案意味着明确定义什么是相当直接的,以便由编译器明确地计算出来(至少在相同的接口没有使用不同类型参数实现两次的情况下,感谢@vyrp 强调了歧义的可能性多重实现案例)给定使用上下文(我认为这不仅是一种更方便的方式,而且更不容易出错)并限制了通用代码重用的机会。我相信这句话可以解释为什么一个不那么冗长的替代方案 提到的替代解决方案意味着明确定义什么是相当直接的,以便由编译器明确地计算出来(至少在相同的接口没有使用不同类型参数实现两次的情况下,感谢@vyrp 强调了歧义的可能性多重实现案例)给定使用上下文(我认为这不仅是一种更方便的方式,而且更不容易出错)并限制了通用代码重用的机会。我相信这句话可以解释为什么一个不那么冗长的替代方案 感谢@vyrp 强调了在多个实现案例中可能存在歧义)给定使用上下文(我认为这不仅是一种更方便的方式,而且更不容易出错)并限制了通用代码重用的机会。我相信这句话可以解释为什么一个不那么冗长的替代方案 感谢@vyrp 强调了在多个实现案例中可能存在歧义)给定使用上下文(我认为这不仅是一种更方便的方式,而且更不容易出错)并限制了通用代码重用的机会。我相信这句话可以解释为什么一个不那么冗长的替代方案ClassB<TA, TB> where TA : IInterfaceA<TB>
语法(作为实现上述逻辑的一种方式)完全可以搜索。