Я не буду обсуждать, можете ли вы построить свой собственный Фасад вокруг этого третьего класса. Предыдущие авторы правы, библиотека может быть спроектирована так, чтобы этого не допустить. Предположим, у них есть несколько связанных классов, у которых есть синглтоны, которые должны быть инициализированы в определенном порядке или что-то вроде этого - может быть много ошибок проектирования (или функций), о которых сторонние разработчики никогда не заботятся, потому что они не предполагают, что вы будете использовать их библиотека таким образом.
Но хорошо, давайте предположим, что построение фасада не является невыполнимой задачей, и у вас на самом деле есть только одна проблема - слишком много методов, которые вы должны написать обертки вокруг , и это не хорошо сделать это вручную.
Я вижу 3 решения для решения именно этой проблемы
1) Я полагаю, что новые «динамические» типы .NET 4.0 позволят вам обойти эту проблему без необходимости писать «акры кода»
Вы должны инкапсулировать экземпляр стороннего класса в свой класс как привилегированный член с динамическим ключевым словом
Ваш класс должен быть производным от Dynamic или реализовывать интерфейс IDynamicObject. Вам нужно будет реализовать функции GetMember / SetMember, которые будут перенаправлять все вызовы инкапсулированному экземпляру класса третьей стороны
Что ж, c # 4.0 - это будущее, давайте посмотрим на другие решения:
2) Не пишите код вручную, если у вас есть значительное количество открытых методов (скажем, более 100). Я написал бы небольшое консольное приложение, которое использует отражение и находит все открытые члены, а затем автоматически генерирует код для вызова инкапсулированного экземпляра. Например
public type MethodName(params)
{
this.anInstanceOf3rdPartyClass.MethodName(params);
}
3) Вы можете сделать то же, что и 2, но с помощью существующих инструментов отражения, например RedGate .NET Reflector. Это поможет вам перечислить все сигнатуры классов и методов. Затем вставьте все это в Word, и простой макрос VB позволит вам сгенерировать тот же код, что и в 2.
Примечание: Как только вы не копируете код, а только копируете сигнатуры методов, которые являются общедоступными, я не думаю, что вы нарушите лицензионное соглашение, но в любом случае стоит перепроверить