Czy można mieć dwie części (tę samą przestrzeń nazw, tę samą nazwę klasy) częściowej klasy w oddzielnych bibliotekach DLL?
Czy można mieć dwie części (tę samą przestrzeń nazw, tę samą nazwę klasy) częściowej klasy w oddzielnych bibliotekach DLL?
Odpowiedzi:
Z MSDN - częściowe klasy i metody :
Wszystkie definicje typu częściowego, które mają być częściami tego samego typu, muszą być zdefiniowane w tym samym zestawie i tym samym module (plik .exe lub .dll). Częściowe definicje nie mogą obejmować wielu modułów.
Nie. Klasy częściowe są cechą czysto językową. Gdy zestaw jest kompilowany, pliki są łączone w celu utworzenia typu. Nie jest możliwe rozłożenie plików na różne zespoły.
Jednak w zależności od tego, co chcesz zrobić, możesz użyć metod rozszerzających, aby osiągnąć to, czego potrzebujesz.
Nie, to niemożliwe. Po skompilowaniu zestawu klasa musi zostać zakończona.
Podczas gdy inne odpowiedzi dostarczają nieprzyjemnego „Nie”, którego nikt, kto wszedł na tę stronę, nie chciał widzieć ani słyszeć, uderzyła mnie inna myśl, o której jeszcze nie wspomniano. Gdyby częściowe klasy były dozwolone we wszystkich zespołach, można by uzyskać dostęp do prywatnych członków istniejących typów, które nie zostały przez niego napisane, co pozwoliłoby mu manipulować nimi w sposób, który nie był zamierzony przez pierwotnego autora, narażając w ten sposób funkcjonalność wszystkich dziedziczących klas też.
Co więcej, te klasy w innych zespołach (i ich dzieciach) musiałyby zostać ponownie skompilowane, aby działały. W związku z tym nie jest logicznie możliwe zezwolenie na podział klasy na różne zestawy.
Możesz użyć metod rozszerzających, jeśli chcesz dodać metodę do klasy w innej bibliotece dll. Jedyną wadą tej metody jest to, że nie można dodawać metod statycznych.
Pytanie brzmi, dlaczego chcesz utworzyć częściową klasę w innym zestawie? Możesz zdefiniować abstrakcyjne klasy i interfejsy w zespołach, być może musisz się temu przyjrzeć.
Prawdopodobnie chcesz po prostu utworzyć klasę Wrapper w swojej własnej bibliotece, wokół klasy w bibliotece trzeciej części. Następnie dodaj dowolną funkcjonalność do klasy opakowania.