c# - 如何定义两个依赖的泛型接口(interface)?

标签 c#

我在使用通用接口(interface)时遇到了问题。初始条件如下:

interface Itemplate1
{
    ...
}

interface Itemplate2<T> where T : Itemplate1
{
    ...
}

它就像一个魅力!但是,当我继续进行应用程序设计的其余部分时,我注意到 Itemplate1 成员还需要 Itemplate2

interface Itemplate1<T> where T : Itemplate2<?>
{
    ...
}

interface Itemplate2<T> where T: Itemplate1<?>
{
    ...
}

我该怎么做? 非常感谢

最佳答案

我在 my Protocol Buffers port 中做过完全相同的事情.我必须警告你,它最终会有点痛苦,但它确实有效。

就我而言,我需要:

public interface IMessage<TMessage, TBuilder>
    where TMessage : IMessage<TMessage, TBuilder>
    where TBuilder : IBuilder<TMessage, TBuilder>

public interface IBuilder<TMessage, TBuilder>
    where TMessage : IMessage<TMessage, TBuilder>
    where TBuilder : IBuilder<TMessage, TBuilder>

很难说您的代码中是否需要完全相同的模式或类似的东西,但这对我有用。诚然,它有助于自动生成实际的具体实现...

关于c# - 如何定义两个依赖的泛型接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7371859/

相关文章:

c# - Fluent NHibernate 多对多中的 Where 子句

c# - .Net套接字(UDP)发送,接收和计划

c# - 如何在 C# 中使用 Console.Log、Print_R()、Debug.Trace?

C# 遍历 3D 数组的最快维度

c# - 有什么方法可以通过提供节点数来访问 TreeView 节点

c# - 无法通过 Roslyn 检索类型信息

c# - 如何进行方法签名缓存?

c# - 有什么方法可以制作包含多个元素的 C# 列表?

c# - 在 C# 中创建新位图时参数无效?

c# - Selenium WebDriver - 如何使用 C# 设置页面加载超时