c# - 固有实现的接口(interface)

标签 c# inheritance interface multiple-inheritance

我经常想创建一个对象列表,其中每个对象都必须实现多个接口(interface)。例如,我想做类似于以下的事情:

List<T> where T : IConvertible, IComparable _myList;

我考虑的另一个选择是创建第三个接口(interface)来实现这两个接口(interface),这样任何实现这两个接口(interface)的对象都可以内在地实现我的接口(interface)。

public interface IConvertibleAndComparable
    : IConvertible, IComparable { }

List<IConvertibleAndComparable> _myList;

有了这个,我将能够添加任何同时实现了 IConvertibleIComparable 的对象,包括 doubleint,以及我自己的对象。不需要显式实现 IConvertibleAndComparable,因为它不会在继承的接口(interface)之外添加任何新功能。

我知道第一个代码段是非法的,第二个代码段虽然合法,但不符合我的要求。是否有可能实现我想要做的事情?如果不是,这些中的任何一个是否会成为 future C# 功能的候选者?

(注意:这将是空接口(interface)的合法应用程序。)

编辑

在更一般的意义上,我想执行以下操作之一:

private MyGenericClass<T> where T : IA, IB, ... _myClass;

我可以在T 上声明我需要的所有限制,

public interface IMyCombinedInterface : IA, IB, ... {}
private MyGenericClass<IMyCombinedInterface> _myClass;

其中任何实现了 IAIB... 的类型都固有地(或隐含地)实现了 IMyCombinedInterface(仅当 IMyCombinedInterface 未明确声明新功能时)。

最佳答案

作为解决方法,您可以做一种叠加包装,并将其存储在列表中。看here为了这个想法。

对于您的示例,您可以这样做:

public class Junction
{
    public IConvertible Convertible { get; private set; }
    public IComparable Comparable { get; private set; }
    private Junction() { }
    public static Junction Create<T>(T value) where T : IConvertible, IComparable
    {
        return new Junction
        {
            Convertible = value,
            Comparable = value
        };
    }
}

然后将 Junction 添加到您的列表中:

var l = new List<Junction>();
l.Add(Junction.Create(1));

关于c# - 固有实现的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12937519/

相关文章:

c# - 扩展 LINQ 表达式

c# - 具有快速多次写入的嵌入式数据库

c# - 命名参数的顺序在 URL 中重要吗?

java - Java 中的接口(interface)敏感操作

java - 强制不变性并在接口(interface)声明中创建实例

java - Android MVP - 调用服务器

c# - 在 SQL 查询中传递 DECLARE 参数

java - 我需要帮助以一种方法将 child 作为父亲传递 [Java]

javascript - 扩展而不是覆盖原型(prototype)

java - 有条件地实例化不同的类