2012-05-08 15 views
7

VS derleyici, WINMD tipi kitaplık için kapalı tipler oluşturulmasına izin vermez.WinMD/WinRT bileşenleri için neden açıkta bırakılmalı?

Bu kısıtlama neden yerleştirilmiştir? (Ben mühürlü türleri avantajları hakkında biliyorum, benim soru Win RT bileşenleri ile ilgili).

+4

Başlığınız bu soruya katılmıyor gibi görünüyor mu? ("mühürlü olmalıdır" vs "mühürlü izin vermez") –

cevap

4

Bu, COM tarafından dayatılan bir mimari sınırlamadır. Herhangi bir WinRT türünün merkezinde yer alan, IUnknown ve IInspectable türetilmiştir. COM ile ilgili problem, yalnızca arabirim mirasını desteklemesi, ancak uygulama kalıtımını desteklememesidir. Güçlü bir COM tasarım hedefi olan uygulama kalıtım, rezil elmas problemi de dahil olmak üzere uygulama ayrıntılarıyla çok ilgili.

heyeti tarafından miras çalışması için bir yol yoktur, türetilmiş sınıftaki her yöntem açıkça karşılık gelen taban arayüzü yöntemini çağıran, ama bu kendiniz yapmak çok acı verici. Ancak, aksi halde, Windows.UI.Xaml sınıflarının devralma yöntemi.

+0

Bu soruya cevap verir. Oldukça doğru değil elmas sorunu – Tilak

+1

söz için özel teşekkür, mühürsüz winrt sınıfları uygulamak mümkündür, ancak bunlar JavaScript tüketilen edilemez ve bunlar görsel stüdyo oldukça zor olabilir düşük seviyeli (IDL) yazma deneyimini kullanarak gerektirir. Ayrıca, tüm türetilmiş sınıflar (mühürlü veya mühürsüz), sonuç olarak Windows ad alanındaki sınıflardan türetilmelidir. –

+0

Herhangi bir destekleyici belgeye işaret edebilir misiniz? Görmek isterdim, bu nasıl yapılabilir? Benim durumumda, tüm VS içinde ihtiyacım var, ama arka planda şeylerin nasıl gittiğini bilmek değer olurdu – Tilak

1

ben maruz tipi tüm farklı dil tür (C#, C++, JavaScript gelecekte herhangi belki daha fazla) dan kullanılabilir olmalıdır sebebi sanırım. Bir sınıfı varsa

Yani, bir sınıfın kullanımının ardından bir yeni sınıf haline geçersiz kıldı. Dersi overide etmek isterdim, bu farklı dilde yapılır. Ama bu bir problem. C++ ile yapılan miras sınıfı tarafından C# ile yapılan bir temel sınıfı nasıl geçersiz kılmak istersiniz? Bu asla işe yaramaz, çünkü her ikisi de tamamen farklı ve uyumsuz OOP uygulamaları var. mühürlenecek maruz sınıfları zorlayarak

, bu sorunu kaldırmak ve insanları böyle bir şey yapmak denemez olun.

Bundan daha çok temel şeyler olduğundan eminim, ama önce aklıma gelen şey buydu.