Вы могли бы использовать ковариантный интерфейс для ShaderParam<T>
:
interface IShaderParam<out T> { ... }
class ShaderParam<T> : IShaderParam<T> { ... }
Использование:
IShaderParam<object>[] parameters = new IShaderParam<object>[5];
parameters[0] = new ShaderParam<string>(); // <- note the string!
Но вы не можете использовать его с типами значений, такими как float
в вашем примере. Ковариация действительна только для ссылочных типов (например, string
в примере my ). Вы также не можете использовать , если параметр типа появляется в противоположных позициях, например, в качестве параметров метода. Тем не менее, было бы полезно узнать об этой технике.