Tasarım kuralları
Tasarım kuralları .NET Framework tasarım yönergelerine bağlı kalmayı destekler.
Bu bölümde
Kural | Açıklama |
---|---|
CA1000: Genel türlerde statik üyeleri belirtme | Genel türün statik üyesi çağrıldığında tür bağımsız değişkeni tür için belirlenmelidir. Destek çıkarımı desteklenmeyen genel örnek üyesi çağrıldığında tür bağımsız değişkeni üye için belirlenmelidir. Bu iki durumda tür bağımsız değişkenini belirleyen sözdizimi farklıdır ve kolaylıkla karıştırılır. |
CA1001: Atılabilir alanlara sahip olan türler atılabilir olmalıdır | Sınıf, System.IDisposable türünde bir örnek alanı bildirir ve uygular ve sınıf IDisposable uygulamaz. IDisposable alanını derleyen sınıf, yönetilmeyen kaynağı dolaylı yoldan sahiplenir ve IDisposable arayüzünü uygulamalıdır. |
CA1002: Genel listeleri gösterme | System.Collections.Generic.List<(Of <(T>)>), devralma için değil performans için tasarlanmış genel bir koleksiyondur. Bu nedenle, Liste herhangi bir sanal üyeyi içermiyor. Bunun yerine devralma için tasarlanmış genel koleksiyonlar maruz kalmalıdır. |
CA1003: Genel olay işleyici örnekleri kullan | Tür, imzası iki parametre (birinci bir nesne ve ikinci EventArgs'e atanabilen bir tür) ve içeren derlemesi .NET Framework 2.0'ı hedefleyen void döndüren bir temsilci içerir. |
CA1005: Genel türlerde aşırı parametrelerden kaçının | Daha çok tip parametresi, genel tip içerir, bilmek daha zordur ve hangi tip parametrelerinin temsil ettiğini anımsamak zordur. Genellikle Liste<T'de olduğu gibi bir tür parametresiyle ve bazı durumlarda Dictionary<TKey>, TValue'da> olduğu gibi iki tür parametresiyle açıktır. Ancak, iki parametreden fazla parametre varsa, birçok kullanıcı için zorluk derecesi artar. |
CA1008: Numaralandırmalar sıfır değerine sahip olmalıdır | Tıpkı diğer türler gibi, başlatılmamış bir numaralandırmanın varsayılan değeri sıfırdır. Öznitelikli olmayan bir sabit listesi, varsayılan değerin sabit listesi için geçerli bir değer olması için sıfır değerini kullanarak bir üye tanımlamalıdır. Numaralandırma FlagsAttribute özniteliği sıfır değerli üyeyi tanımlarsa, onun adı numaralandırmada hiçbir değerin ayarlanmadığı "Hiçbiri" olmalıdır. |
CA1010: Koleksiyonlar genel arabirim uygulamalıdır | Bir koleksiyon kullanılabilirliğini genişletmek için genel koleksiyon arabirimlerinden birini uygulayın. Daha sonra koleksiyon genel koleksiyon türlerini doldurmak için kullanılabilir. |
CA1012: Soyut türlerin ortak oluşturucuları olmamalıdır | Soyut türler üzerindeki kurucular yalnızca türetilen türler tarafından çağrılabilir. Ortak yapıcılar türün bir örneğini yaptığından ve siz bir soyut türün örneğini yapamayacağınızdan, soyut sınıf hatalı biçimde dizayn edilmiş ortak yapıcıya sahip olur. |
CA1014: Derlemeleri CLSCompliantAttribute ile işaretleyin | Ortak Dil Tanımlaması (CLS) ad kısıtlamalarını, veri türlerini ve karşıt programlama dillerini kullanırsa derlemelerin uyması zorunlu olan kuralları tanımlar. İyi tasarım, tüm derlemelerin CLSCompliantAttribute kullanarak CLS uyumluluğunu açıkça belirtmelerini sağlar. Bu öznitelik bir derlemede yoksa, montaj uyumlu değildir. |
CA1016: Derlemeleri AssemblyVersionAttribute ile işaretleyin | .NET, bir derlemeyi benzersiz olarak tanımlamak ve kesin olarak adlandırılmış derlemelerdeki türlere bağlanmak için sürüm numarasını kullanır. Sürüm numarası, sürüm ve yayımcı ilkesi ile birlikte kullanılır. Varsayılan olarak uygulamalar yalnızca oluşturulmuş derleme sürümlerini çalıştırır. |
CA1017: Derlemeleri ComVisibleAttribute ile işaretleyin | ComVisibleAttribute COM müşterilerinin yönetilen koda nasıl erişeceğini tanımlar. İyi tasarım derlemelerin açıkça COM görünürlüğünde gösterildiğini belirler. COM görünürlüğü tüm derleme için ayarlanabilir ve sonra bireysel tür ve tür üyeleri için geçersiz kılınabilir. Bu öznitelik yoksa, derleme içeriği COM istemcileri tarafından görülebilir. |
CA1018: Öznitelikleri AttributeUsageAttribute ile işaretleyin | Özel öznitelik tanımladığınızda, AttributeUsageAttribute kullanarak özel öznitelik kaynak kodunun nerede uygulanabilir olduğunu göstermek için işaretleyin. Bir özniteliğin anlamı ve amaçlanan kullanımı, kodun içinde onun varolan konumunu tanımlar. |
CA1019: Öznitelik bağımsız değişkenleri için erişimcileri tanımlayın | Öznitelikler özniteliği işaretlediğinizde özelleştirilen zorunlu bağımsız değişkenleri tanımlayabilir. Ayrıca bunlar konum parametreleri olarak öznitelik yapıcısına verildiğinden duruma bağlı bağımsız değişkenler olarak da bilinirler. Zorunlu her bağımsız değişken için bağımsız değişkenin değeri yürütme zamanından alınması gerektiğinden öznitelik ilgili salt okunur özelliği de sağlamalıdır. Öznitelikler adlandırılmış bağımsız değişkenler olarak bilinen duruma bağlı bağımsız değişkenler olarak da tanımlanabilir. Bu bağımsız öznitelik oluşturucular ad tarafından sağlanır ve karşılık gelen bir okuma/yazma özelliğine sahip olmalıdır. |
CA1021: Out parametrelerinden kaçının | Başvuruya ( out veya ref kullanarak ) göre türleri geçirmek işaretçi deneyimi gerektirir, değer türü ve referans türü arasındaki farkı ve işleme yöntemi ile birden çok değer döndürmeyi anlamak gerekir. Ayrıca, out ve ref parametreleri arasındaki fark açıkça anlaşılmadı. |
CA1024: Uygun yerlerde özellikler kullanın | Ortak veya korumalı yöntem "Get" ile başlar, herhangi bir parametre almaz ve dizi olmayan bir değer döndüren adı vardır. Yöntem, özellik olmak için çok iyi bir aday olabilir. |
CA1027: Numaralandırmaları FlagsAttribute ile işaretleyin | Bir numaralandırma ilişkili adlandırılmış sabitler kümesini tanımlayan değer türüdür. Anlamsız olarak birleştirildiğinde numaralandırmaya FlagsAttribute özelliğini uygulayın. |
CA1028: Numaralandırma depolaması Int32 olmalıdır | Bir numaralandırma ilişkili adlandırılmış sabitler kümesini tanımlayan değer türüdür. Varsayılan olarak, System.Int32 veri türü sabit değerleri depolamak için kullanılır. Bu temel türü değiştirebilmenize rağmen, çoğu senaryo için gerekli değildir veya önerilmez. |
CA1030: Uygun yerlerde olaylar kullanın | Bu kural, normalde olaylar için kullanılan adlara sahip yöntemleri algılar. Yanıt olarak açıkça tanımlanmış bir durum değişikliği yöntemi çağrılırsa, olay işleyicisi tarafından yöntemin çağrılması gerekir. Yöntemi direkt olarak çağırmak yerine olayları yükselterek çağıran nesneler. |
CA1031: Genel özel durum türlerini yakalamayın | Genel özel durum yakalanmamalı. Daha özel bir özel durum yakalayın veya catch bloğundaki son deyim olarak genel özel durumu yeniden yükleyin. |
CA1032: Standart özel durum oluşturucuları uygulayın | Yapıcıların tüm ayarlamasını sağlamaktaki başarısızlık, istisnalarla başa çıkmayı zorlaştırabilir. |
CA1033: Arabirim yöntemleri alt türler tarafından çağırılabilir olmalıdır | Ağzı açık dışarıdan görünen bir tür açık yöntem uygulaması ortak bir arabirim sağlar ve aynı ada sahip alternatif dışarıdan görünen bir yöntem sağlamaz. |
CA1034: İç içe türler görünebilir olmamalıdır | İç içe türü başka bir kapsamda bildirilen bir türdür. İç içe geçmiş türler, özel uygulama ayrıntılarını kapsayan türdeki kapsül oluşturma için kullanışlıdır. Bu amaçla kullanılan, iç içe türün dışarıdan görünür olmaması gerekir. |
CA1036: Karşılaştırılabilir türlerde geçersiz kılma yöntemleri | Ortak veya korumalı tür System.IComparable arabirimini uygular. Object.Equals ne etkisiz kılınabilir ne de eşitlik için olan özel dil işleciyle aşırı yüklenebilir, eşitsizlik durumu olabilir, daha küçülebilir ya da büyüyebilir. |
CA1040: Boş arabirimlerden kaçının | Arayüzler bir davranış veya kullanım sözleşmesi sağlayan üyeleri tanımlar. Arabirim tarafından tanımlanan fonksiyonellik herhangi bir tür tarafından türün kalıtım hiyerarşisinde nerede belirdiği önemsenmeksizin devralınabilir. Tür arabirimin üyeleri için uygulamaları sağlayarak bir arayüz uygular. Boş bir arabirim herhangi bir üye tanımlamıyor; bu nedenle, uygulanabilir bir sözleşme tanımlamaz. |
CA1041: ObsoleteAttribute iletisi sağlayın | Tür veya üye belirtilen kendi ObsoleteAttribute.Message özelliğine sahip olmayan bir System.ObsoleteAttribute özniteliği kullanılarak işaretlendi. ObsoleteAttribute kullanılarak işaretlenmiş bir tür veya üye derlendiğinde, özniteliğin message özelliği görüntülenir ve bu özellik kullanıcıya eski tür veya üye hakkında bilgi verir. |
CA1043: Dizin oluşturucular için tamsayı veya dize bağımsız değişkeni kullanın | Dizinle oluşturucular (dizinlenmiş özellikleri) dizin için integral veya dize türleri kullanılmalıdır. Bu türler, genellikle veri yapılarını dizinleme için kullanılır ve bunlar kitaplığın kullanılabilirliğini artırır. Nesne türünün kullanılması için belirli bir integral veya dize türü tasarım zamanında burada tarif edilemez, bu gibi durumlarda sınırlı tutulmalıdır. |
CA1044: Özellikler salt yazılır olmamalıdır | Salt okunur özelliğe sahip olmasına karşın kabul edilebilir ve genellikle gereklidir, tasarıma ilişkin yönergeler salt yazılır özellik kullanılmasını engeller. Bir kullanıcı değeri ayarlar ve sonra kullanıcı bu değeri görüntülemeyi engellerse bunun için herhangi bir güvenlik yoktur. Ayrıca, okuma erişimi olmadan, yararsız olduklarını sınırlayan paylaşılan nesnelerin durumu görüntülenemez. |
CA1045: Türleri başvuruya göre geçirmeyin | Başvuruya ( out veya ref kullanarak ) göre türleri geçirmek işaretçi deneyimi gerektirir, değer türü ve referans türü arasındaki farkı ve işleme yöntemi ile birden çok değer döndürmeyi anlamak gerekir. Genel bir hedef kitle için tasarım yapan kitaplık mimarları, kullanıcıların out veya ref parametreleriyle çalışma konusunda yetkin olmasını beklememelidir. |
CA1046: Başvuru türlerinde eşittir işleçlerini aşırı yüklemeyin | Başvuru türleri için, varsayılan eşitlik işleci neredeyse her zaman doğrudur. Varsayılan olarak, yalnızca aynı nesneye gelirseniz iki başvuru eşit olur. |
CA1047: Korumalı türlerde korunan üyeleri bildirmeyin | Türler, devralmasına erişebileceğiniz veya üyeyi geçersiz kılmak için korunan üyelerin türlerini bildirir. Tanım gereği, mühürlenmiş türler devralınamaz yani mühürlenmiş türler üzerindeki korunan yöntemler çağrılamaz. |
CA1050: Ad alanlarında türleri bildirin | Türlerin ad çakışmalarını önlemek için ad alanlarını ve ilgili türü bir nesne sıradüzeni içinde düzenlemeniz için yöntem olarak bildirilir. |
CA1051: Görünür örnek alanlarını bildirmeyin | Bir alanın birincil kullanım alanının uygulama ayrıntısı olması gerekir. Alanların özel veya iç olması gerekir ve özelliklerini kullanmaya maruz kalması gerekir. |
CA1052: Statik tutucu türleri mühürlenmelidir | Ortak veya korumalı tür yalnızca statik üyeler içerir ve korumalı (C#) veya NotInheritable (Visual Basic) değiştiricisi kullanılarak bildirilmez. Devralınmayacak anlamına gelen tür mühürleme değiştirici kullanılarak basit tür gibi kullanılmak için işaretlenmelidir. |
CA1053: Statik tutucu türlerinde oluşturucular bulunmamalıdır | Ortak veya iç içe geçmiş ortak tür yalnızca statik üyeleri bildirir ve ortak veya korumalı varsayılan bir oluşturucu vardır. Statik üyeleri çağırma bir tür örneği gerektirmediğinden kurucu gereksizdir. Dize aşırı yüklemesi, emniyet ve güvenlik için dize bağımsız değişkeni kullanılarak tekdüzen kaynak tanımlayıcısı (URI) çağırmalıdır. |
CA1054: URI parametreleri dizeler olmamalıdır | Bir yöntem URI'yı sunan bir dizeyi alırsa, bu hizmetleri sağlayan güvenli şekilde URI sınıfının bir örneğini alır, karşılık gelen aşırı olmalıdır. |
CA1055: URI dönüş değerleri dizeler olmamalıdır | Bu kural, yöntemin URI döndürdüğünü varsayar. Bir URI'nın dize sunumu ayrıştırma ve hataları kodlama eğilimindedir ve güvenlik açıklarına yol açabilir. System.Uri sınıfı bu hizmetleri güvenli bir şekilde sağlar. |
CA1056: URI özellikleri dize olmamalıdır | Bu kural, özelliğinin bir URI'yi temsil ettiğini varsayar. Bir URI'nın dize sunumu ayrıştırma ve hataları kodlama eğilimindedir ve güvenlik açıklarına yol açabilir. System.Uri sınıfı bu hizmetleri güvenli bir şekilde sağlar. |
CA1058: Türler belli temel türleri genişletmemelidir | Dışarıdan görünen tür belirli temel türleri genişletir. Diğer seçenekleri kullanın. |
CA1060: P/Invokes öğesini NativeMethods sınıfına taşıyın | Visual Basic'te Declare anahtar sözcüğü kullanılarak tanımlanan veya yöntemleriyle System.Runtime.InteropServices.DllImportAttribute işaretlenmiş olanlar gibi platform çağırma yöntemleri yönetilmeyen koda erişin. Bu yöntemler, NativeMethods, SafeNativeMethods veya UnsafeNativeMethods sınıfının üyesi olmalıdır. |
CA1061: Taban sınıf yöntemlerini gizlemeyin | Basit türdeki bir yöntem türetilmiş türdeki adlandırılmış yöntem tarafından gizlenmiştir, türetilmiş yöntemin parametre imzası yalnızca türetilmiş türleri ve karşılık gelen temel yöntemin parametre imzası daha zayıf türlerine göre farklı olduğunda temel türde bir yöntemin türetilmiş türle aynı adlı yöntem olarak gizlidir. |
CA1062: Genel yöntemlerin bağımsız değişkenlerini doğrulayın | Dışarıdan görünen yöntemlerin null'a karşı denetlenmesi için geçirilen tüm başvuru bağımsız değişkenleri. |
CA1063: IDisposable'ı doğru uygulayın | Tüm IDisposable türleri Dispose kalıbını doğru uygulamalıdır. |
CA1064: Özel durumlar genel olmamalıdır | Bir iç özel durum yalnızca kendi iç kapsamı içinde görülebilir. İç kapsam dışında kalan özel durumlardan sonra, sadece basit istisnalar istisna yakalamak için kullanılabilir. İç özel durum , System.SystemExceptionveya System.ApplicationExceptionöğesinden System.Exceptiondevralındıysa, dış kod özel durumla ne yapacağını bilmek için yeterli bilgiye sahip olmaz. |
CA1065: Beklenmedik konumlarda özel durumlar tetiklemeyin | İstisna atılmasını beklemeyen yöntem bir istisna atar. |
CA1066: Eşittir'i geçersiz kılırken IEquatable uygulama | Bir değer türü yöntemini geçersiz kılar Equals , ancak uygulamaz IEquatable<T>. |
CA1067: IEquatable'ı uygularken Eşittir'i geçersiz kılma | Bir tür uygular IEquatable<T>, ancak yöntemini geçersiz kılmaz Equals . |
CA1068: CancellationToken parametreleri en son gelmelidir | Yöntem, son parametre olmayan bir CancellationToken parametresine sahiptir. |
CA1069: Sabit listeleri yinelenen değerlere sahip olmamalıdır | Sabit listesi, açıkça aynı sabit değere atanmış birden çok üyeye sahiptir. |
CA1070: Olay alanlarını sanal olarak bildirmeyin | Alan benzeri bir olay sanal olarak bildirildi. |
GitHub'da bizimle işbirliği yapın
Bu içeriğin kaynağı GitHub'da bulunabilir; burada ayrıca sorunları ve çekme isteklerini oluşturup gözden geçirebilirsiniz. Daha fazla bilgi için katkıda bulunan kılavuzumuzu inceleyin.