Nie będę omawiać, czy możesz zbudować własną elewację wokół tej klasy. Poprzedni autor ma rację, bibliotekę można zaprojektować w sposób, który na to nie pozwoli. Załóżmy, że mają kilka połączonych klas, które mają single, które powinny zostać zainicjalizowane w określonej kolejności lub coś podobnego - może być dużo błędów w projektowaniu (lub funkcjach), których twórcy stron trzecich nigdy nie dbają, ponieważ nie sądzą, że użyjesz ich biblioteka w ten sposób.
Ale OK, załóżmy, że budowanie elewacji nie jest niemożliwym zadaniem, a ty masz tylko jeden problem - jest zbyt wiele metod, które musisz napisać owijki wokół numeru, i nie jest dobrze, aby to zrobić ręcznie.
widzę 3 rozwiązania w celu rozwiązania tego problemu dokładnie
1) Przypuszczam, że nowe „dynamiczne” typy .NET 4.0 pozwala na obejście tego problemu bez konieczności pisania „akrów kodem” Powinieneś Inkapsulate wystąpienie klasy 3rd party do klasy jako członek privare z dynamicznym słowem kluczowym Twoja klasa powinna pochodzić z Dynamic lub implementować interfejs IDynamicObject. Trzeba będzie wdrożyć GetMember funkcje/SetMember że przekaże wszystkie połączenia do odizolowanej instancji klasy 3rd party
Dobrze, C# 4.0 to przyszłość, Zobaczmy na inne rozwiązania:
2) Nie zapisuj kodu ręcznie, jeśli masz znaczną liczbę publicznych metod (powiedzmy więcej niż 100). Napisałbym małą aplikację konsolową, która używa odbicia i znajduje wszystkich publicznych członków, a następnie automatycznie generuje kod wywołujący enkapsulowaną instancję. Na przykład
public type MethodName(params)
{
this.anInstanceOf3rdPartyClass.MethodName(params);
}
3) Można zrobić tak samo jak 2, ale z pomocą istniejących narzędzi odbicie, na przykład RedGate .NET Reflector. Pomoże ci to wyświetlić wszystkie podpisy klas i metod. Następnie wklej to wszystko w programie Word, a proste makro VB pozwoli ci wygenerować ten sam kod, co w 2.Uwaga: jak tylko nie będziesz kopiował kodu, a jedynie podpisy metod kopiowania, które są publicznie dostępne , Nie sądzę, żebyś naruszył umowę licencyjną, ale w każdym razie warto ponownie sprawdzić:
Część pierwsza: http://blogs.msdn.com/ericlippert/archive/2008/09/26/preventing-third-party-derivation-part-one.aspx –
Część druga: http: //blogs.msdn .com/ericlippert/archive/2008/10/06/prevent-third-party-derivation-part-two.aspx –