代码之家  ›  专栏  ›  技术社区  ›  TerrorAustralis

为参数指定多个接口

  •  18
  • TerrorAustralis  · 技术社区  · 14 年前

    我有一个实现两个接口的对象。。。接口包括:

    public interface IObject
    {
        string Name { get; }
        string Class { get; }
        IEnumerable<IObjectProperty> Properties { get; }
    }
    public interface ITreeNode<T>
    {
        T Parent { get; }
        IEnumerable<T> Children { get; }
    }
    

    public class ObjectNode : IObject, ITreeNode<IObject>
    {
        public string Class { get; private set; }
        public string Name { get; private set; }
        public IEnumerable<IObjectProperty> Properties { get; set; }
        public IEnumerable<IObject> Children { get; private set; }
        public IObject Parent { get; private set; }
    }
    

    现在我有了一个函数,它需要一个参数来实现这两个接口。我该如何在C#中指定它呢?

    public TypedObject(ITreeNode<IObject> baseObject, IEnumerable<IType> types, ITreeNode<IObject>, IObject parent)
    {
        //Construct here
    }
    

    或者问题是我的设计错了,我应该在一个接口上实现这两个接口

    4 回复  |  直到 8 年前
        1
  •  32
  •   Tara McGrew    14 年前
    public void Foo<T>(T myParam)
        where T : IObject, ITreeNode<IObject>
    {
        // whatever
    }
    
        2
  •  12
  •   Anders Fjeldstad    14 年前

    在C#中,接口本身可以从一个或多个其他接口继承。所以一个解决方案就是定义一个接口,比如 IObjectTreeNode<T> 两者兼而有之 IObject ITreeNode<T> .

        3
  •  1
  •   C. Dragon 76    14 年前

    定义一个同时实现IObject和ITreeNode的接口可能是最简单的。

    public interface IObjectNode<T> : IObject, ITreeNode<T>
    {
    }
    

    public void Foo<T>(T objectNode) where T : IObject, ITreeNode<IObject>
    
        4
  •  -4
  •   anivas    14 年前
    public  void MethodName<TParam1, TParam2>(TParam1 param1, TParam2 param2) 
        where TParam1 : IObject
        where TParam2 : ITreeNode<IObject>