Özellik 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.
Özellikler teknik olarak yöntemlere çok benzer olsa da kullanım senaryoları açısından oldukça farklıdır. Bunlar akıllı alanlar olarak görülmelidir. Alanların çağrı söz dizimi ve yöntemlerin esnekliği vardır.
✔️ Çağıranın özelliğin değerini değiştirememesi gerekiyorsa DO get-only özellikleri oluşturun.
Özelliğin türü değiştirilebilir bir başvuru türüyse, özellik yalnızca get-only olsa bile özellik değerinin değiştirilebileceğini unutmayın.
❌ Ayarlayıcıya, alıcıdan daha geniş erişilebilirliği olan salt ayarlı özellikler veya özellikler SAĞLAMAYIN.
Örneğin, özellikleri ortak ayarlayıcı ve korumalı bir alıcı ile kullanmayın.
Özellik alıcısı sağlanamıyorsa, bunun yerine işlevi bir yöntem olarak uygulayın. Yöntem adını ile Set
başlatmayı göz önünde bulundurun ve özelliğini adlandırdığınız adla izleyin. Örneğin, AppDomain adlı bir set-only özelliği yerine adlı SetCachePath
CachePath
bir yöntemi vardır.
✔️ DO, varsayılan değerlerin bir güvenlik deliğine veya çok verimsiz bir koda neden olmadığından emin olarak tüm özellikler için mantıklı varsayılan değerler sağlar.
✔️ DO, bu nesnenin geçici bir geçersiz durumuna neden olsa bile özelliklerin herhangi bir sırada ayarlanmasına izin verir.
İki veya daha fazla özelliğin, aynı nesnedeki diğer özelliklerin değerleri dikkate alındığında bir özelliğin bazı değerlerinin geçersiz olabileceği bir noktayla ilişkilendirilmesi yaygın bir durumdur. Böyle durumlarda, geçersiz durumdan kaynaklanan özel durumlar, birbiriyle ilişkili özellikler nesne tarafından gerçekten birlikte kullanılana kadar ertelenmelidir.
✔️ DO, bir özellik ayarlayıcısı özel durum oluşturursa önceki değeri korur.
❌ Özellik alıcılarından özel durumlar oluşturmaKTAN KAÇıNıN.
Özellik alıcıları basit işlemler olmalı ve önkoşulları olmamalıdır. Bir alıcı özel durum oluşturabiliyorsa, büyük olasılıkla yöntem olarak yeniden tasarlanmalıdır. Bu kuralın, bağımsız değişkenlerin doğrulanmasının bir sonucu olarak özel durumlar beklediğimiz dizin oluşturucular için geçerli olmadığını fark edin.
Dizinli Özellik Tasarımı
Dizinli özellik, parametreleri olabilecek ve dizi dizinlemesine benzer özel söz dizimiyle çağrılabilen özel bir özelliktir.
Dizine alınan özellikler genellikle dizin oluşturucular olarak adlandırılır. Dizin oluşturucular yalnızca mantıksal koleksiyondaki öğelere erişim sağlayan API'lerde kullanılmalıdır. Örneğin, dize bir karakter koleksiyonudur ve dizin oluşturucu System.String karakterlerine erişmek için eklenmiştir.
✔️ İç dizide depolanan verilere erişim sağlamak için dizin oluşturucuları kullanmayı GÖZ ÖNÜNDE BULUNDURUN.
✔️ Öğe koleksiyonlarını temsil eden türlerde dizin oluşturucular sağlamayı GÖZ ÖNÜNDE BULUNDURUN.
❌ Birden fazla parametreyle dizine alınan özellikleri kullanmaktan KAÇıNıN.
Tasarım birden çok parametre gerektiriyorsa, özelliğin bir mantıksal koleksiyona yönelik bir erişimciyi gerçekten temsil edip etmediğini yeniden düşünün. Aksi takdirde, bunun yerine yöntemleri kullanın. Yöntem adını veya Set
ile Get
başlatmayı göz önünde bulundurun.
❌, , System.Int64, System.StringSystem.Objectveya bir sabit listesi dışında System.Int32parametre türlerine sahip AVOID dizin oluşturucuları.
Tasarım başka parametre türleri gerektiriyorsa, API'nin bir mantıksal koleksiyona yönelik bir erişimciyi gerçekten temsil edip etmediğini kesinlikle yeniden değerlendirin. Aksi takdirde bir yöntem kullanın. Yöntem adını veya Set
ile Get
başlatmayı göz önünde bulundurun.
✔️ DO, açıkça daha iyi bir ad olmadığı sürece dizine alınan özellikler için adı Item
kullanın (örneğin, üzerindeki System.String
özelliğine Chars[] bakın).
C# dilinde dizin oluşturucular varsayılan olarak Item olarak adlandırılır. IndexerNameAttribute bu adı özelleştirmek için kullanılabilir.
❌ Hem dizin oluşturucu hem de eşanlamlı olarak eşdeğer yöntemler SAĞLAMAYIN.
❌ Bir türde birden fazla aşırı yüklenmiş dizin oluşturucu ailesi SAĞLAMAYIN.
Bu, C# derleyicisi tarafından zorlanır.
❌ Dizine alınmayan özellikleri KULLANMAYIN.
Bu, C# derleyicisi tarafından zorlanır.
Özellik Değişikliği Bildirim Olayları
Bazen kullanıcıya bir özellik değerindeki değişiklikleri bildiren bir olay sağlamak yararlı olabilir. Örneğin, System.Windows.Forms.Control
özelliğinin Text
değeri değiştikten sonra bir TextChanged
olay oluşturur.
✔️ Üst düzey API'lerdeki (genellikle tasarımcı bileşenleri) özellik değerleri değiştirildiğinde değişiklik bildirimi olayları oluşturmayı düşünün.
Bir kullanıcının bir nesnenin özelliğinin ne zaman değiştiğini bilmesi için iyi bir senaryo varsa, nesne özelliği için bir değişiklik bildirimi olayı tetiklemelidir.
Ancak, temel türler veya koleksiyonlar gibi alt düzey API'ler için bu tür olayları tetiklerken ek yük oluşturma olasılığı düşüktür. Örneğin, List<T> listeye yeni bir öğe eklendiğinde ve özellik değiştiğinde Count
bu tür olaylar tetiklenmez.
✔️ Bir özelliğin değeri dış kuvvetler aracılığıyla değiştiğinde değişiklik bildirimi olaylarını oluşturmayı GÖZ ÖNÜNDE BULUNDURUN.
Bir özellik değeri bazı dış kuvvetler aracılığıyla değişirse (nesnede yöntemleri çağırmaktan başka bir şekilde), olayları geliştiriciye değerin değiştiğini ve değiştiğini gösterir. Metin kutusu denetiminin Text
özelliği iyi bir örnektir. Kullanıcı bir TextBox
içinde metin yazdığınızda özellik değeri otomatik olarak değişir.
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ı.