Как @Neil Barnwell сказал, адаптер - это путь. Но будьте осторожны, интерфейсы не должны использоваться таким образом, и хотя это может пригодиться, вы должны по крайней мере тщательно обдумать это.
См. Интерфейс не являются биективными функциями, они предназначены для предоставления набора «правил», определяющих, что объект способен делать «да», но порядок, в котором они должны использовать, - это сначала определить их описать дизайн вашего приложения (или что вам нужно), а затем использовать его, а не наоборот. Или, другими словами, интерфейс определяет поведение в контексте ВАШЕ приложения, которое могло бы или не могло бы совпадать с предполагаемым использованием платформы .NET.
Это означает, что для каждого класса, который вы «адаптируете», вы должны убедиться не только в том, что он следует за синтаксисом интерфейса (то же имя метода, что и у параметров) , но также и в том, что он следует духу интерфейса.
Например, у меня может быть класс с методом Dispose ... это не обязательно означает, что он реализует IDisposable ... возможно, это не потому, что мой метод Dispose может создавать исключение или блокировать учитывая время, поэтому, выполняя контракт, он не выполняет дух.
Теперь это может случиться и в вашем приложении, но гораздо менее вероятно, потому что вы знаете интерфейс, поэтому вполне естественно, что вы придерживаетесь его духа ... но как мог разработчик .NET framework сделать одна и та же?
Было бы неплохо, если бы был инструмент для автоматизации этого. http://stackoverflow.com/questions/5035188/net-tools-extract-interface-and-implement-wrapper-class/5035800#5035800 – 2011-02-18 00:13:19