Я хотел бы решить проблему (в настоящее время гипотетическую, но, вероятно, реальную в будущем) использования методов расширения и определения интерфейса класса в будущем.
Пример:
/* the code written in 17. March 2010 */
public class MySpecialList : IList<MySpecialClass> {
// ... implementation
}
// ... somewhere elsewhere ...
MySpecialList list = GetMySpecialList(); // returns list of special classes
var reversedList = list.Reverse().ToList(); // .Reverse() is extension method
/* now the "list" is unchanged and "reveresedList" has same items in reversed order */
/* --- in future the interface of MySpecialList will be changed because of reason XYZ*/
/* the code written in some future */
public class MySpecialList : IList<MySpecialClass> {
// ... implementation
public MySpecialList Reverse() {
// reverse order of items in this collection
return this;
}
}
// ... somewhere elsewhere ...
MySpecialList list = GetMySpecialList(); // returns list of special classes
var reversedList = list.Reverse().ToList(); // .Reverse() was extension method but now is instance method and do something else !
/* now the "list" is reversed order of items and "reveresedList" has same items lake in "list" */
Мой вопрос: есть ли способ предотвратить это дело (я их не нашел)? Если сейчас есть способ, как предотвратить это, есть ли способ, как найти возможные проблемы, как это? Если сейчас есть способ, как найти возможные проблемы, я должен запретить использование методов расширения?
Спасибо.
EDIT:
Ваш ответ был полезен.
Могу ли я найти, где в коде используются методы расширения? И / или я могу найти, где в коде используются методы экземпляра, но существует метод расширения с такой же сигнатурой?