2010-09-04 16 views
5

Sadece C++/cli hakkında küçük bir soru. Özet sınıflar, türetilmiş sınıflar tarafından uygulanacak soyut yöntemlere sahiptir, mühürlü sınıflar mirasa izin vermez.Özet Mühürlü Sınıflar

Neden .NET temel sınıf kitaplığında soyut mühürlü olarak tanımlanan bazı sınıflarımız var ve bol miktarda bulabilirsiniz .. ??!

+0

örnekleri? Bu benim için ilginç bir tasarım kararıdır, bu yüzden hangileri olduğunu görmek istedim :) –

+0

http://msdn.microsoft.com/en-us/library/system.math.aspx –

cevap

15

C# dilinde "statik sınıf" ile eşdeğerdir. Hemen hemen tüm BCL sınıflarını yazmak için kullanılan dil. Tüm yöntemler statik olmalıdır. Soyut ve mühürlü ilan etmek, herhangi birinin sınıftan türetilmesini ve bir örneğini oluşturmasını engeller.

Sınıf yöntemleri, C ve C++ dillerindeki serbest işlevlerin tam karşılığıdır. CLR'nin desteklemediği bir şey.

+0

Size tamamen katılıyorum, becuause Örneğin, JAVA'S MATH sınıfına benziyor, ancak msdn dokümantasyonu bunu yapamazsa, neden mümkün olmadığını ya da doğru olmadığını söylüyor ??! –

+0

@Ebraheem Najjar: Bunu yalnızca doğrudan IL seviyesinde yapmak mümkündür. Derleyici, doğrudan "mühürlü bir soyut" sınıfı yazmanıza izin vermez. –

+0

Bir sınıftaki IL nitelikleri, dilde bulunan anahtar kelimelerden farklıdır. C# 'da, mühürlenmiş bir sınıf beyan etmenin bir anlamı yoktur * ve * soyut, şikayet eder. Statik olarak bildirmek, bu IL özniteliklerini açan şeydir. 'Statik' bir sınıf için CLR analogu yoktur. –

2

ikisi de özet ve mühürlü, bir anlam

Mühürlenmiş bir sınıf temel bir sınıf olarak kullanılamaz kılar. Bu nedenle, soyut bir sınıf da olamaz. Mühürlü sınıflar türetmeyi engeller. Bir temel sınıf olarak asla kullanılamayacakları için, bazı çalışma zamanı optimizasyonları, çağrıyı mühürlü sınıf üyelerini biraz daha hızlı hale getirebilir.

http://msdn.microsoft.com/en-us/library/ms173150.aspx

+0

C++/cli anlamına geliyordu. public ref sınıfını deneyin CProperty mühürlü özet { }; –

+7

Statik C# sınıfı aslında 'soyut olarak mühürlenmiş', ancak bu değiştiricileri açıkça kodunuzda kullanamazsınız. Ancak OP, statik sınıf kavramının olmadığı C++/CLI hakkında konuşuyor. –