Ayrı DLL'lerde kısmi sınıflar


154

Ayrı DLL'lerde kısmi bir sınıfa iki bölüm (aynı ad alanı, aynı sınıf adı) sahip olmak mümkün müdür?


diğerleri gibi mümkün değil, ama farklı kaynaklardan yeni davranış ile sınıfları takviye yolları vardır, tam olarak farklı dlls yapmak istiyorsun?
Ozan

Benim durumumda, bir üçüncü taraf kitaplığında tanımlanan bir sınıfa birkaç statik yöntem eklemek istiyorum. Genişletme yöntemleri çalışmaz ve sınıf statik olduğundan arabirimler ve kalıtım da olmaz. Kısmi statik sınıflara sahip olabileceğinizi keşfettikten sonra, meclislerde çalışıp çalışmadığını öğrenmek için buraya geldim ama bunun da işe yaramayacağı anlaşılıyor.
Ben

Yanıtlar:



36

Hayır. Kısmi sınıflar tamamen dil özelliğidir. Bir derleme derlendiğinde, dosyalar tür oluşturmak için birleştirilir. Dosyaları farklı montajlara yaymak mümkün değildir.

Ne yapmak istediğinize bağlı olarak, ihtiyacınız olanı başarmak için uzantı yöntemlerini kullanabilirsiniz .


13

Hayır, bu mümkün değil. Derleme derlendiğinde sınıfın tamamlanması gerekir.


8

Diğer cevaplar, bu sayfaya inen kimsenin görmek veya duymak istemediği hoş olmayan "Hayır" ı sağlasa da, burada henüz belirtilmeyen başka bir düşünce beni etkiledi. Meclisler arasında kısmi sınıflara izin verildiyse, kendisi tarafından yazılmamış mevcut türlerin özel üyelerine erişebilir, böylece orijinal yazar tarafından tasarlanmayan şekillerde manipüle edilmesine izin verilir, böylece tüm miras sınıflarının işlevselliği tehlikeye girer çok.

Sadece bu da değil, diğer meclislerdeki (ve çocuklarının) bu sınıfların çalışması için yeniden derlenmesi gerekir. Dolayısıyla, bir sınıfın farklı montajlar üzerinde bölünmesine izin vermek mantıklı olarak mümkün değildir.


Gerçekten gerektiğinde yansıma yoluyla özel üyelerle kolayca karışıklık olabilir. Bir sınıfı derlemeler arasında bölmek mümkün değildir, çünkü dairesel referanslara izin verilmez ve sınıfın farklı bölümlerinin etkileşime girmesi için bunlara ihtiyaç duyulur.
Zar Shardan

6

Farklı bir dll'de bir sınıfa yöntem eklemek istediğinizde uzantı yöntemlerini kullanabilirsiniz. Bu yöntemin tek dezavantajı statik yöntemler ekleyememenizdir.


3

Soru, neden başka bir mecliste kısmi bir sınıf yapmak istersiniz? Montajlar arasında soyut sınıfları ve arayüzleri tanımlayabilirsiniz, belki de buna bakmanız gerekir.


10
IMHO geçerli durumlar vardır, örneğin: Farklı bir montajda tanımlanan bir model sınıfına MVC form ek açıklamaları eklemek isteyebilirsiniz. Derlemenin kendisi hangi bağlamda kullanıldığını bilmediğinden, derlemedeki sınıfın ek açıklamaları olmamalıdır. MVC bağlamında (mümkünse) kısmi bir sınıfa eklenebilirler.
nyi

3
nyi, neden sadece o sınıftan miras kalmıyorsun ve niteliklerini zirvede ilan etmiyorsun? İsterseniz adı aynı adı bile verebilirsiniz.
Gleno

0

Muhtemelen kendi kütüphaneniz içinde, 3. bölüm kütüphanesindeki sınıfın etrafında bir Wrapper sınıfı oluşturmak istiyorsunuz. Ardından, sarma sınıfına herhangi bir işlevsellik ekleyin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.