Brzmi jak Twoje pytanie jest jaka jest różnica między
partial class Foo
{
PART ONE
}
partial class Foo
{
PART TWO
}
i
astract class FooBase
{
PART ONE
}
partial class Foo : FooBase
{
PART TWO
}
Chociaż mogą one pojawić się nieco podobne, aw niektórych przypadkach ta ostatnia konstrukcja może być stosowany w miejsce pierwszy, są co najmniej dwa problemy z tym drugim stylem:
-1- Typ FooBase
prawdopodobnie musiałby znać tożsamość konkretny typ, który miał z niego wywodzić, i zawsze używaj zmiennych tego typu, a nie typu FooBase
. Stanowi to nieprzyjemnie ścisłe powiązanie między tymi dwoma typami.
-2- Jeśli typ Foo
jest publiczny, wpisz FooBase
również musi być publiczny. Nawet jeśli wszyscy konstruktorzy FooBase
są internal
, możliwe byłoby, że zewnętrzny kod definiuje klasy, które pochodzą od FooBase
, ale nie Foo
; konstruowanie przypadków takich klas byłoby trudne, ale nie niemożliwe.
Jeśli możliwe było rozszerzenie typu widocznego typu bazowego, problemy te nie byłyby zbyt problematyczne; można by uznać FooBase
jako identyfikator "wyrzucania", który pojawiłby się dokładnie dwa razy: raz w swojej deklaracji i jeden raz w wierszu deklaracji dla Foo
, a także, że każdy znak FooBase
będzie w przebraniu Foo
. Fakt, że FooBase
nie może korzystać z członków instancji Foo
pod numerem this
bez typowania, może być irytujący, ale może również zachęcać do dobrego podziału kodu. Ponieważ nie jest możliwe rozszerzenie widoczności typu podstawowego, jednak abstrakcyjna klasa wydaje się kłująca.
Wiem, że nie ma to nic wspólnego z dziedziczeniem, ALE możesz zrobić to samo, ponieważ jest to efekt uboczny dziedziczenia, który możesz podzielić na oddzielne pliki. Prawdopodobnie nie tak ładnie i czysto, jak choćby częściowe klasy. Po prostu próbuję znaleźć dla nich użytek. – uriDium
Ups, przepraszam. Byłem zbyt szybki na klawiaturze. Więc ostatecznie kod projektanta i twój kod znajdą się w tym samym pliku? Teraz widzę użycie, jeśli tak jest. Ale prawdopodobnie nigdy go nie użyję, chyba że spróbuję zrobić coś podobnego. – uriDium
Robią coś zupełnie innego niż dziedziczenie. Przykładem użycia jest Visual Studio. Kreator formularzy generuje częściowy plik klasy z kodem, który ustawia formanty. Kod użytkownika znajduje się w osobnym pliku. Po skompilowaniu te pliki łączą się w jedną klasę. Naprawdę zabójcza aplikacja klas częściowych służy do tworzenia klas, które składają się częściowo, ale nie w całości z wygenerowanego kodu. Możesz zrobić coś podobnego za pomocą (na przykład) programu odwzorowującego O/R. – ConcernedOfTunbridgeWells