使用接口的泛型T列表 [英] List of Generics T using Interface
问题描述
以下这两个问题:
和
public interface IValue
{
object Min {get ;组; }
对象Max {get;组; }
对象Avg {get;组; }
}
公共抽象类值< T> :IValue
{
abstract T Min;
abstract T Max;
abstract T Avg;
对象IValue.Avg {get {return Avg; }}
对象IValue.Min {get {return Min; }}
对象IValue.Max {get {return Max; }}
公共价值(T min,T max,T avg)
{
Min = min;
Max = max;
Avg = avg;
代码中的其他地方....
值myValue =新值< ulong>(x,y,z);
值myValue =新值< ushort>(x,y,z);
列表< IValue> myList = new List< IValue>();
myList.add(myValue);
//做类似myList [0] .Min
我无法得到这个正常工作。我想象它与我的界面以及我如何使用它有关。我希望能够调用构造函数并设置值,但是我需要。
我得到类似修饰符'abstract'的字段错误。尝试使用属性相反和无法创建接口Value的抽象类的实例,但我也无法创建新的IValue。
为什么你根本就使用 abstract ?如果您想创建类实例,那么该类不能是 abstract 。
public class Value< T>:IValue {
//更好地将这些字段命名为min,max,ave或m_Min,m_Max,m_Ave
T Min;
T Max;
T平均;
//不要忘记设置访问器
对象IValue.Avg {
get {return Avg; }
set {Avg =(T)value; }
}
object IValue.Min {
get {return Min; }
set {Min =(T)value; }
}
object IValue.Max {
get {return Max; }
set {Max =(T)value; }
}
公共价值(T min,T max,T avg){
Min = min;
Max = max;
Avg = avg;
}
}
...
//Value< ulong> myValue,而不是Value myValue
Value< ULONG> myValue = new Value< ulong>(x,y,z);
列表< IValue> myList = new List< IValue>();
myList.Add(myValue);
Following these two SO questions:
Is it possible to use a list of untyped generics in C#?
and
How am I able to create A List<T> containing an open generic Interface?
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;
}
}
Somewhere else in code....
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
I can't get this to work properly. I Imagine it has to do with my interface and how I'm using it. I want to be able to call a constructor and set the values however I need to.
I get errors like "modifier 'abstract' not valid on fields. Try a property instead" and "Cannot create an instance of the abstract class of interface Value" but I also can't do new IValue either.
Why do you use abstract at all? If you want to create class instances the class can't be abstract.
public class Value<T>: IValue {
// Better to name these fields as "min, max, ave" or "m_Min, m_Max, m_Ave"
T Min;
T Max;
T Avg;
// Do not forget about "set" accessors
object IValue.Avg {
get { return Avg; }
set { Avg = (T) value; }
}
object IValue.Min {
get { return Min; }
set { Min = (T) value; }
}
object IValue.Max {
get { return Max; }
set { Max = (T) value; }
}
public Value(T min, T max, T avg) {
Min = min;
Max = max;
Avg = avg;
}
}
...
// "Value<ulong> myValue" instead of "Value myValue "
Value<ulong> myValue = new Value<ulong>(x, y, z);
List<IValue> myList = new List<IValue>();
myList.Add(myValue);
这篇关于使用接口的泛型T列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!