使用接口的泛型T列表

use*_*991 1 c# generics list

遵循以下两个SO问题:

是否可以在C#中使用无类型泛型列表?

我如何创建包含开放通用接口的A List <T>?

  public interface IValue
{
    object Min { get; set; }
    object Max { get; set; }
    object Avg { get; set; }
}

public abstract class Value<T> : IValue
{
     abstract T Min;
     abstract T Max;
     abstract T Avg;
    object IValue.Avg { get { return Avg; } }
    object IValue.Min { get { return Min; } }
    object IValue.Max { get { return Max; } }

    public Value(T min, T max, T avg)
    {
        Min = min;
        Max= max;
        Avg = avg;
    }
}
Run Code Online (Sandbox Code Playgroud)

代码中的其他地方....

Value myValue = new Value<ulong>(x, y, z);
Value myValue = new Value<ushort>(x, y, z);
List<IValue> myList = new List<IValue>();
myList.add(myValue);
//Do stuff like myList[0].Min
Run Code Online (Sandbox Code Playgroud)

我不能让它正常工作.我想想它与我的界面以及我如何使用它有关.我希望能够调用构造函数并设置我需要的值.

我得到的错误像"修饰符'抽象'在字段上无效.尝试一个属性而不是"和"无法创建接口值的抽象类的实例"但我也不能做新的IValue.

pok*_*oke 5

  • 您无法创建接口的对象,因此您无法做到new IValue().

  • 您无法创建抽象类型的对象,因此您也无法做到new Value<SomeType>().

  • Value<T>,Min,MaxAvg和字段不能是抽象的.您想要制作属性:

    public abstract T Min { get; set; }
    public abstract T Max { get; set; }
    public abstract T Avg { get; set; }
    
    Run Code Online (Sandbox Code Playgroud)
  • 你可能根本不想使用它abstract.Value<T>看起来非常完整,并且鉴于您希望能够创建它,没有理由将它作为抽象类型.