2012-10-24 28 views
5

Bir yöntemi iki dosyada C# içine bölmek mümkün mü? Kısmi yöntemlerin var olduğunu biliyorum, ama görünüşte bunu yapamazlar. İki dosya arasında bir yöntemi bölme C#

İşte senaryo. Açık kaynaklı bir kütüphane kullanıyorum ve bir veya daha fazla dosyaya bazı özelleştirmeler eklemem gerekiyor. Örneğin, Employee sınıfına iki yeni alan eklemek ve bunları bu sınıfın InitializeFields() yönteminde başlatmak istiyorum. Açık kaynak projesi gelişmeye devam ettiğinden ve her defasında yeni sürümler yayınlandıktan sonra, özelleştirmelerimi özgün projeden ayrı tutmak, kütüphanenin yeni sürümlerine kolayca yükseltmek istiyorum.

Zaten partial class sözdizimi kullanılarak Orig.cs ve Custom.cs içine gerekli tüm sınıfları bölünmüş ve Custom.cs benim özel alanlar ekledik. Şimdi sorun, özel kodumun Custom.cs dosyasına girebilmesi için InitializeFields() yöntemini bölme yöntemim yok.

Sorunu çözmek için miras kullanamayacağımı lütfen unutmayın. Açık kaynak kütüphanesi, Çalışan sınıfı için çok sayıda referans içerecek ve ben hepsini değiştirmeyi göze alamıyorum.

+7

Genel olarak konuşmak gerekirse, bu * mevcut * kodun uzatılabilir bir yolu değildir. “Çalışan” sınıfından miras almayı ve kendi alanlarınızı eklemeyi düşündünüz mü? Bu şekilde InitializeFields() 'i geçersiz kılabilirsiniz, kendi alanlarınızı initleyebilir ve sonra base.InitializeFields() 'olarak adlandırın. –

+0

Üzgünüm neden miras kullanamazsın? neden değişmek için çok var? bu sorunu bulup değiştirir mi? –

+0

Çalışan sınıfı için çok sayıda referans içermeli ve bunların hepsini değiştiremiyorum_ - __Refactor, Rename__ –

cevap

5

Bunu yaptığınızda, kitaplığı kendiniz derliyorsunuz değil mi?

Employee'un alt sınıfını istemediğinizi anlıyorsunuz, çünkü new Employee() numaralı tüm kitaplık kodları çalışmaz. Ancak, Employee, Orig.cs içinde EmployeeBase için yeniden adlandırır ve Custom.cs sınıfında Employee sınıfını sağlarsanız ne olur? Bu şekilde kütüphane kodu derlendiğinde, new Employee() kütüphaneye değil, sınıfınıza başvurur. Kütüphaneyi ve özelleştirmelerinizi aynı projede derlediğiniz için, bu değişikliği yapabilirsiniz.

+0

çok yaratıcı cevap :) –

+0

Teşekkürler David. OOP'un akıllıca kullanımı. – dotNET