我有一个通用类,
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)
答案 0 :(得分:4)
您只能通过将data
弱化键入object
作为接口的成员:
public interface IComputeVariable
{
object Data { get; }
}
(请注意,它必须是属性 - 您不能在接口中指定字段。)
您可能希望在ComputeScalar<T>
中明确实现该功能,以避免在强类型版本可用的情况下使用弱类型版本。
另一种方法是使界面通用,和SomeClass
:
class SomeClass<T> where T : struct
{
List<IComputeVariable<T>> variables;
}
我们对您的情况了解不足以了解哪种方法正确,但这些是您的两种选择。
答案 1 :(得分:1)
interface IComputeVariable<T> where T : struct
{
T Data { get; }
}
class ComputeScalar<T> : IComputeVariable<T> where T : struct
{
// This is why i have to use generics.
ComputeBuffer<T> buffer;
public T Data {get; set; }
}