Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Uyarı
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ılma söz dizimine ve metodların esnekliğine sahiptirler.
✔️ Ç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, genel ayarlayıcı ve korumalı alıcıya sahip olan özellikleri kullanmayın.
Özellik alıcısı sağlanamıyorsa, bunun yerine işlevi bir metot olarak uygulayın. Yöntem adını Set olarak başlatmayı ve ardından özellik için düşündüğünüz adla devam etmeyi göz önünde bulundurun. Örneğin, AppDomain adlı nesne, yalnızca ayarlanabilir bir özellik olan SetCachePath yerine CachePath adlı bir yönteme sahiptir.
✔️ 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. Getter bir özel durum oluşturabiliyorsa, muhtemelen bir 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.
Dizinlenmiş Ö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 System.String üzerindeki indeksleyici, 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 gerçekten mantıksal bir koleksiyona erişim sağlama amacını taşıyıp taşımadığını yeniden düşünün. Aksi takdirde, bunun yerine yöntemleri kullanın. Yöntem adını Get veya Set ile başlatmayı göz önünde bulundurun.
❌, , System.Int32, System.Int64System.Stringveya bir sabit listesi dışında System.Objectparametre 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ı Get veya Set ile başlatmayı göz önünde bulundurun.
✔️ Açıkça daha iyi bir ad olmadığı sürece indekslenmiş özellikler için Item adını kullanın (Örneğin, Chars[] üzerindeki System.String özelliğine 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ş dizinleyici ailesi sağlamayın.
Bu, C# derleyicisi tarafından uygulanır.
❌ Varsayılan olmayan dizinli özellikleri KULLANMAYIN.
Bu, C# derleyicisi tarafından uygulanı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 TextChanged değeri değiştikten sonra bir Text 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 tetiklenir ve bu, geliştiriciye değerin değişmekte olduğunu ve değiştiğini belirtir. Metin kutusu denetiminin Text özelliği iyi bir örnektir. Kullanıcı bir TextBoxiç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. tarafından Krzysztof Cwalina ve Brad Abrams'ın Yeniden Kullanılabilir .NET Kütüphaneleri için Çerçeve Tasarım Yönergeleri: Sözleşmeler, Deyimler ve Kalıplar, 2. Baskı eserinden izniyle yeniden basılmıştır. Addison-Wesley Professional tarafından Microsoft Windows Geliştirme Serisi kapsamında 22 Ekim 2008'de yayımlanmıştır.