我来自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来访问;也就是说,我不希望在接口中显式列出类型集合。
T
未被处理时,您如何处理异常? - Jodrell