我正在将现有的 .NET 类库移植到可移植类库。.NET 库广泛使用ICloneable接口,该接口不包含在可移植子集中。
通常,我在 .NET 类库中会遇到这样的类定义:
public class Foo<T> where T : ICloneable
{
public void Bar(T item) {
var x = item.Clone();
...
}
}
我该怎么做才能成功将此代码移植到可移植类库?我是否必须重写Clone
方法调用,或者是否有不那么侵入性的解决方法?
我不能简单地删除泛型类型约束where T : ICloneable
,因为那样该Bar
方法将无法编译。
我可以编写一个替换接口来使用,而不是ICloneable
在移植的代码中:
public interface IPCLCloneable {
object Clone();
}
只要我只Foo<T>
用实现的类进行实例化,这将起作用IPCLCloneable
,但它不适用于例如来自实现的核心库的类型ICloneable
,例如Array:
var x = new Foo<int[]>(); // Compilation error in PCL library
(为了完整起见,应该指出,该ICloneable
接口没有在可移植子集核心库中显式实现,因为它不存在,但该object Clone()
方法确实存在于可移植子集Array
类中,因此对于数组实现,例如int[]
.)
我还有什么其他选择?