GUID özniteliği için gereklilik nedir? Neden derleyicinin bunu otomatik olarak ele almasına izin vermiyorsunuz ?! derleyici otomatik olarak bu ele durumundaGUID özniteliği neden ilk etapta gerekli?
cevap
, iki durumlardan biri ile bitirmek istiyorum.
Her derlediğinizde yeni bir GUID - GUID'lerin yayınlanması gerektiğinden, bu başarısız olur.
Çarpışmalar - GUID her seferinde aynıysa (adın) bir Hash'e dayanarak, birden fazla proje farklı amaçlar için aynı GUID kullanılarak sonuçlanır.
mevcut yaklaşım - açık bir GUID geliştiricilere gerektiği gibi bu kontrol etmek için güç verir.
Bazen belirli sınıfları vermek istiyorum veya sabit ve sert Kaynağınızın içine kodlanmış olan benzersiz bir tanımlayıcı modülleri.
Yapabilirsin (sadece niteliğini ihmal) ancak her arayüz değişmiş olsa bile yeniden derlemek daha sonra derleyici yeni bir GUID oluşturur. Bu talihsiz bir durumdur çünkü bu arayüzün kullanıcıları değişiklik hakkında bilgi sahibi olmaz ve arayüzü eski GUID tarafından geri alır ve bu nedenle geri getiremezler.
Bunlar, COM'a büyük önem veren özelliklerdir. .NET'in öncülü olan ve Java'yı gösteriyi çalmadan önce, doksanların doksanlı günlerini kutladı. .NET'in başarılı olma şansı için COM ile uyumlu olması gerekiyordu. Diğer bir deyişle, büyük bir eski programın kullanabileceği bir .NET dilinde bir COM sunucusu yazabilmeniz gerekir.
Bu [ComVisible] özelliği, bir COM istemci programı görmek ve IEnumerable arabirimini kullanmasını sağlar. İstemci programının .NET koleksiyonlarını numaralandırmasına izin verilmesi önemlidir.
[Guid] öznitelik COM çok önemlidir
, bir arayüz tanımlar. Farklı programcılar tarafından yazılmış birden fazla uygulamada benzersiz olduğundan emin olmak için bir isim değil, bir kılavuz tarafından yapılır. .NET de buna sahiptir, ancak insanlara kolaylık sağlamak için bir isim kullanır. "System.Collections.IEnumerable, mscorlib, Sürüm = 2.0.0.0, Kültür = tarafsız, PublicKeyToken = b77a5c561934e089".IEnumerable <>, jenerik versiyon, bir [Guıd] yoktur. Jenerikler COM ile uyumlu değildir. Bu günlerde pek de önemli değil, artık etrafta çok fazla görülebilen COM yok, çoğunun dostça .NET sınıfları tarafından sarılmış. Ancak Windows'da, özellikle de yeni WinRT'de (aka Metro) hala çok çekirdekli. Bunu doğrudan kullanmıyorsunuz, COM'u bir şekilde Windows programlama dili dili gibi yapıyorsunuz.
Bu tanımı okumak için, bu özelliklerin her birinin anlamını bulmanız gerekir. İlk, ComVisibleAttribute
, bu şekilde tarif edilir: Bir bireyin
Kontroller erişilebilirlik COM, bir montaj içindeki türü veya üye ya da her türlü başardı.
ComVisible
COM ile ilgili bir şey olduğunu ve bize belli bir tip COM programlarına görünür olup olmadığını belirtmenizi sağlar söyler
. Sayfada daha ayrıntılı olarak, niteliğin ne olduğu ve tür kitaplığı ihracatçısı tarafından nasıl kullanıldığı hakkında daha fazla ayrıntıya bir bağlantı vardır.
ikinci GuidAttribute
, ilk başta biraz daha az yararlıdır: Bir otomatik GUID
ama yine sen kalanını okumak zorunda istenmeyen olduğunda
açık System.Guid Malzemeleri Aşağı inerken, kütüphane ihracatçısının bir başka sözünü göreceksiniz. Bu ikisi bir araya
, bu iki özelliği bir tür kitaplığına dışa aktarıldığında
IEnumerator
nasıl işleneceğini denetlemek açıkça olmaya başlar. Bir tür kitaplığın ne olduğunu bilmiyorsanız, bu muhtemelen size çok şey ifade etmeyecektir. COM birlikte çalışmazsanız, bu özellikler güvenli bir şekilde yok sayılabilir. Eğer olan COM birlikte çalışma kullanılıyorsa, düzgün yönetilmeyen COM kodundan arayüzüne erişmek içinGuid
bilmesi gerekir.Microsoft onlara ihtiyaç halinde her arayüz tanımı bu koyar; MSDN sayfalarını okuma becerisinin bir parçası, bu tür bilgileri tanımak ve sizin için herhangi bir kullanımda olmadığında bunu bilmektir. Artık bu iki özelliğin ne için olduğunu bildiğinize göre, sizin için uygun olup olmadıklarını anlayabilmelisiniz ve bunları aksini göz ardı etmelisiniz.
- 1. asp.net vnext sınıf kitaplığında gerekli özniteliği kullanamazsınız
- 2. AdMob: Gerekli XML özniteliği eksik adUnitID
- 3. Golang'da neden arayüz gerekli?
- 4. guid/uuid
- 5. Neden min özniteliği ngChange çağrılsın?
- 6. Neden ikinci bir cin.ignore() gerekli?
- 7. Neden bir yeterlilik gerekli değil?
- 8. Gerekli özellikler ne zaman giriş öğeleri için aria gerekli özniteliği ile kullanılmalıdır?
- 9. Regasm.exe neden benim C# derlememi yanlış GUID ile kaydettiriyor?
- 10. Neden Guid.NewGuid hiçbir zaman 4 içermeyen bir Guid üretmez?
- 11. GUID nasıl oluşturulur?
- 12. MVC callbackUrl guid
- 13. Bilinmeyen Proje Türü GUID
- 14. guid REST URL?
- 15. GUID adımı nasıl oluşturmalıyım?
- 16. Check boş SQL'de Guid
- 17. Python örneklerinin neden __name__ özniteliği yok?
- 18. Neden UITableView'ın temsilci özelliği özniteliği zayıf değil
- 19. Normal vektör için vertex özniteliği neden çalışmıyor?
- 20. Neden style özniteliği android kullanmıyor? Neden isim alanı öneki
- 21. Neden gerekli program için çıktı almıyorum?
- 22. özniteliği
- 23. İlk Bağlantı öğesi neden atlanıyor?
- 24. Kodum neden ilk satırı okuyor?
- 25. GUID ve Varlık Çerçevesi ile Çalışmak
- 26. Entity Framework 6 Kod İlk - Gerekli Enum veri türü çalışmıyor
- 27. XQuery Hatası: XPTY0019: '/' ilk işleneninin gerekli öğe türü, node();
- 28. obje gerekli hata
- 29. Her zaman eşit bir sayıya sahip GUID
- 30. Visual Studio projesi tipi guid
Bu yüzden her zaman elle o özellik kullanmak üzere bir 'Sağlıklı-alışkanlık', ya da yalnızca belirli durumlarda gereklidir? – Nissim
el her zaman bunu kullanarak çok daha iyi olacak - aksi takdirde sadece arayüz uygulaması COM sunucusu değişti eğer tüm istemcilerin olayı yeniden derlemek gerekecek. – sharptooth
Yalnızca sınırlı durumlarda bir GUID öznitelik eklemek gerekir - Eğer başka bir sistem tarafından kullanılmak üzere bir COM nesnesi yazmak için .NET kullanıyorsanız birincil bir, COM birlikte şimdilik. Ne tür bir projeye sahip olduğunuza bağlı olarak, bu günlük bir etkinlik veya yıllık bir etkinlik olabilir. – Bevan