我来自 C++ 模板编程,有时对泛型感到非常困惑。由于没有方法专业化,我尝试使用强制转换。这是我所拥有的:
public interface INonGen
{
void Get<T>(ref T value);
}
public interface IGen<U> : INonGen
{
}
public class Gen<U> : IGen<U>
{
private U u;
public void Get<T>(ref T value)
{
if (value is U)
{
value = (T) u;
}
else
throw new Exception();
}
}
这不编译。
我有办法制作这个演员表吗?
我想要这个的原因:使用 C++ 模板,我会对支持的类型进行专门化,以及抛出异常的非专门化版本。
基本思想是这样的:具有泛型方法的非泛型接口。尝试使用正确类型获取值应该有效,尝试使用错误类型可能会抛出。
我们应该保持类型安全,所以我需要返回正确类型的实例/值。任何对象上的快捷方式都是不可接受的,在非泛型接口中也不能约束类型。
通用实现是为了避免重复。我想支持多种不同的类型(但只有一小部分类型),但我希望在实例化一个类时决定这一点(并定义 T 的含义);我仍然希望非通用接口允许使用任何 T 进行访问;也就是说,我不希望在接口中显式地设置类型集。