Я переношу существующую библиотеку классов .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[]
.)
Какие еще параметры у меня есть?