2009-07-01 16 views

cevap

9

, 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.

+1

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

+1

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

+2

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

1

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.

2

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.

8

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.

0

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çin Guid 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.