Sabit Listesi Tasarımı

Not

Bu içerik, Çerçeve Tasarım Yönergeleri: Kurallar, Deyimler ve Yeniden Kullanılabilir .NET Kitaplıkları için Desenler, 2. Sürüm'den Pearson Education, Inc.'in izniyle yeniden yazdırılır. Bu baskı 2008'de yayımlandı ve kitap o zamandan beri üçüncü baskıda tamamen revize edilmiştir. Bu sayfadaki bazı bilgiler güncel olmayabilir.

Sabit listeleri özel bir tür değer türüdür. İki tür sabit listesi vardır: basit sabit listeleri ve bayrak sabit listeleri.

Basit sabit listeleri, küçük kapalı seçenek kümelerini temsil eder. Basit sabit listesi için yaygın bir örnek, bir renk kümesidir.

Bayrak sabit listeleri, sabit listesi değerleri üzerinde bit düzeyinde işlemleri destekleyecek şekilde tasarlanmıştır. Bayraklar sabit listesinin yaygın bir örneği, seçeneklerin listesidir.

✔️ DO, parametreleri, özellikleri kesin olarak yazmak ve değer kümelerini temsil eden değerler döndürmek için bir sabit listesi kullanır.

✔️ DO, statik sabitler yerine bir sabit listesi kullanmayı tercih eder.

❌ Açık kümeler (işletim sistemi sürümü, arkadaşlarınızın adları vb.) için numaralandırma KULLANMAYIN.

❌ Gelecekte kullanıma yönelik ayrılmış sabit listesi değerleri SAĞLAMAYIN.

Daha sonraki bir aşamada mevcut sabit listesine istediğiniz zaman değer ekleyebilirsiniz. Sabit listelerine değer ekleme hakkında daha fazla ayrıntı için bkz. Numaralandırmalara Değer Ekleme. Ayrılmış değerler yalnızca gerçek değerler kümesini kirleter ve kullanıcı hatalarına yol açma eğilimindedir.

❌ Yalnızca bir değerle numaralandırmaları herkese açık bir şekilde kullanıma salamaKTAN KAÇıNıN.

C API'lerinin gelecekteki genişletilebilirliğini sağlamaya yönelik yaygın bir uygulama, yöntem imzalarına ayrılmış parametreler eklemektir. Bu tür ayrılmış parametreler tek bir varsayılan değere sahip sabit listeleri olarak ifade edilebilir. Bu, yönetilen API'lerde yapılmamalıdır. Yöntem aşırı yüklemesi, gelecek sürümlerde parametre eklemeye olanak tanır.

❌ Sabit listelerine sentinel değerleri EKLEMEYİn.

Bazen çerçeve geliştiricilerine yardımcı olsalar da, sentinel değerleri çerçeve kullanıcılarının kafasını karıştırır. Bunlar, sabit listesi tarafından temsil edilen kümedeki değerlerden biri olmak yerine numaralandırmanın durumunu izlemek için kullanılır.

✔️ DO, basit sabit listelerinde sıfır değeri sağlar.

Değerini "Yok" gibi bir şekilde çağırmayı göz önünde bulundurun. Böyle bir değer bu belirli bir sabit listesi için uygun değilse, sabit listesi için en yaygın varsayılan değere temel alınan sıfır değeri atanmalıdır.

✔️ Aşağıdakilerden herhangi biri doğru olmadığı sürece bir numaralandırmanın temel türü olarak (çoğu programlama dilinde varsayılan) kullanmayı Int32 GÖZ ÖNÜNDE BULUNDURUN:

  • Sabit listesi bir bayraklar sabit listesidir ve 32'den fazla bayrağınız vardır veya gelecekte daha fazlasının olmasını beklersiniz.

  • Farklı boyutlu sabit listeleri bekleyen yönetilmeyen kodla daha kolay birlikte çalışabilirlik için temel türün farklı olması Int32 gerekir.

  • Daha küçük bir temel tür, alanda önemli ölçüde tasarruf sağlar. Numaralandırmanın esas olarak denetim akışı için bağımsız değişken olarak kullanılmasını bekliyorsanız boyut çok az fark yaratır. Aşağıdakiler durumunda boyut tasarrufları önemli olabilir:

    • Sabit listesinin çok sık örnek oluşturulmuş bir yapıda veya sınıfta alan olarak kullanılmasını bekliyorsunuz.

    • Kullanıcıların sabit listesi örneklerinin büyük dizilerini veya koleksiyonlarını oluşturmasını beklersiniz.

    • Numaralandırmanın çok sayıda örneğinin serileştirilmesini beklersiniz.

Bellek içi kullanım için, yönetilen nesnelerin her zaman DWORDhizalı olduğunu unutmayın; bu nedenle, örnek boyutu her zaman bir değerine yuvarlanacağından, daha küçük bir sabit listesiyle birlikte daha küçük bir sabit listesi paketlemek için bir örnekte birden çok sabit listesi veya diğer küçük yapılara etkili bir DWORDşekilde ihtiyacınız vardır.

✔️ Çoğul isim veya isim tümceciği içeren DO ad numaralandırmaları ve tekil adlar veya isim tümcecikleri içeren basit sabit listeleri.

❌ Doğrudan GENIŞLETMEYİN System.Enum .

System.Enum , CLR tarafından kullanıcı tanımlı numaralandırmalar oluşturmak için kullanılan özel bir türdür. Çoğu programlama dili, bu işleve erişmenizi sağlayan bir programlama öğesi sağlar. Örneğin, C# enum dilinde bir numaralandırma tanımlamak için anahtar sözcük kullanılır.

Bayrak Sabit Listeleri Tasarlama

✔️ DO, System.FlagsAttribute bayrak numaralandırmalarını uygulamak için öğesini uygular. Bu özniteliği basit sabit listelerine uygulamayın.

✔️ DO, bit düzeyinde OR işlemi kullanılarak serbestçe birleştirilebilmeleri için bayrak sabit listesi değerleri için iki güç kullanır.

✔️ Yaygın olarak kullanılan bayrak birleşimleri için özel numaralandırma değerleri sağlamayı GÖZ ÖNÜNDE BULUNDURUN.

Bit düzeyinde işlemler gelişmiş bir kavramdır ve basit görevler için gerekli olmamalıdır. ReadWrite bu tür özel bir değere örnektir.

❌ Belirli değer bileşimlerinin geçersiz olduğu bayrak sabit listeleri oluşturmaktan KAÇıNıN.

❌ Değerin "tüm bayraklar temizlendi" değerini temsil etmediği ve bir sonraki kılavuzda belirtildiği gibi uygun şekilde adlandırılmadığı sürece sıfırın bayrak sabit listesi değerlerini kullanmaktan KAÇıNıN.

✔️ DO, bayrak sabit listelerinin sıfır değerini adlandırın None. Bayrak sabit listesi için değer her zaman "tüm bayraklar temizlendi" anlamına gelir.

Sabit Listelerine Değer Ekleme

Zaten gönderdikten sonra bir sabit listesine değer eklemeniz gerektiğini keşfetmek çok yaygındır. Yeni eklenen değer mevcut bir API'den döndürülürken olası bir uygulama uyumluluk sorunu vardır çünkü kötü yazılmış uygulamalar yeni değeri doğru işleyemeyebilir.

✔️ Küçük bir uyumluluk riskine rağmen sabit listelerine değer eklemeyi GÖZ ÖNÜNDE BULUNDURUN.

Bir sabit listesi eklemelerinden kaynaklanan uygulama uyumsuzluklarıyla ilgili gerçek verileriniz varsa, yeni ve eski değerleri döndüren yeni bir API eklemeyi ve eski API'yi kullanımdan kaldırmayı göz önünde bulundurun; bu da yalnızca eski değerleri döndürmeye devam etmelidir. Bu, mevcut uygulamalarınızın uyumlu kalmasını sağlar.

Porsiyonlar © 2005, 2009 Microsoft Corporation. Tüm hakları saklıdır.

Pearson Education, Inc. in Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraryes, 2nd Edition by Krzysztof Cwalina and Brad Abrams izniyle yeniden yazdırıldı ve 22 Ekim 2008'de Addison-Wesley Professional tarafından Microsoft Windows Geliştirme Serisi'nin bir parçası olarak yayımlandı.

Ayrıca bkz.