Я переношу существующую библиотеку классов .NET в переносимую библиотеку классов. Библиотека .NET широко использует интерфейс ICloneable, который не включен в переносное подмножество.
Как правило, я сталкиваюсь с определениями классов, как это в библиотеке классов .NET:
public class Foo<T> where T : ICloneable
{
public void Bar(T item) {
var x = item.Clone();
...
}
}
Что я могу сделать, чтобы успешно перенести этот код в переносимую библиотеку классов? Должен ли я переписывать вызовы метода Clone, или существует ли менее навязчивое обходное решение?
Я не могу просто удалить ограничение типа generic 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[].)
Какие еще параметры у меня есть?