我有一个普通班
class ComputeScalar<T> : IComputeVariable where T : struct
{
// This is why i have to use generics.
ComputeBuffer<T> buffer;
T data;
}
class ComputeArray<T> : IComputeVariable where T : struct
{
// This is why i have to use generics.
ComputeBuffer<T> buffer;
T[] data;
}
我在另一个班级的列表中使用该班级,
class SomeClass
{
List<IComputeVariable> variables;
}
我创建了接口,因为在C#中我们不能将泛型类用于类型参数。 (对吗?)我想学习的是如何使“数据”成为接口的成员?在运行时如何确定数据类型?
(数据可以是任何ValueType)
最佳答案
您只能通过弱地将其输入data
来使object
成为接口的成员:
public interface IComputeVariable
{
object Data { get; }
}
(请注意,它必须是一个属性-您不能在接口中指定字段。)
然后,您可能希望在
ComputeScalar<T>
中显式实现该功能,以避免在有强类型版本的地方使用弱类型版本。另一种选择是使接口通用,
SomeClass
也是如此:class SomeClass<T> where T : struct
{
List<IComputeVariable<T>> variables;
}
我们对您的处境确实了解不足,无法确定哪种方法正确,但这是您的两个选择。