2012-10-24 30 views
5

Czy można podzielić metodę na dwa pliki w języku C#? Wiem, że istnieją częściowe metody, ale najwyraźniej nie mogą tego zrobić.Podział metody na dwa pliki w języku C#

Oto scenariusz. Używam biblioteki o otwartym kodzie źródłowym i muszę dodać kilka dostosowań w jednym lub kilku plikach. Na przykład chcę dodać dwa nowe pola do klasy Employee, a następnie zainicjować je w metodzie InitializeFields() tej klasy. Ponieważ projekt open-source wciąż ewoluuje, a nowe wersje są co jakiś czas wypuszczane, chcę, aby moje dostosowania były oddzielne od oryginalnego projektu, aby łatwo było uaktualnić je do nowszych wersji biblioteki.

już podzielone wszystkich wymaganych klas w Orig.cs i Custom.cs użyciu partial class składni i dodałem moje pól niestandardowych w Custom.cs. Problem polega na tym, że nie mam możliwości podziału metody InitializeFields(), więc mój kod niestandardowy przechodzi do pliku Custom.cs.

Należy pamiętać, że nie mogę użyć dziedziczenia w celu rozwiązania problemu. Biblioteka o otwartym kodzie źródłowym zawierałaby wiele odniesień do klasy pracownika i nie mogę pozwolić sobie na ich zmianę.

+7

Ogólnie rzecz biorąc, nie jest to * obsługiwany sposób rozszerzania istniejącego kodu. Czy rozważałeś dziedziczenie z klasy "Pracownik" i dodawanie własnych pól? W ten sposób możesz przesłonić 'InitializeFields()', zainicjować własne pola, a następnie wywołać 'base.InitializeFields()'. –

+0

Przykro mi, dlaczego nie możesz korzystać z dziedziczenia? bo czy jest dużo do zmian? czy znaleźć i wymienić rozwiązać to? –

+0

_would zawierać liczne odniesienia do klasy Employee i nie mogę sobie pozwolić na zmianę ich wszystkich_ - spójrz na __Refactor, Zmień nazwę__ –

Odpowiedz

5

Gdy to zrobisz, sam kompilujesz bibliotekę, prawda?

Rozumiem, że nie chcesz podklasy Employee, ponieważ wtedy cały kod biblioteki, który ma new Employee(), nie będzie działać. Jednak co się stanie, jeśli zmienisz nazwę na Employee na EmployeeBase w Orig.cs i udostępnisz klasę Employee w pliku Custom.cs? W ten sposób, gdy skompilowany zostanie kod biblioteki, new Employee() odniesie się do twojej klasy, a nie biblioteki. Ponieważ kompilujesz bibliotekę i swoje dostosowania w tym samym projekcie, możesz dokonać tej zamiany.

+0

bardzo kreatywna odpowiedź :) –

+0

Dzięki David. Sprytne wykorzystanie OOP. – dotNET