Nitelik Oluşturma
Nitelik Oluşturma
Nitelik sınıflarını tanımlamak ve bunları çalışma zamanında yansıtmak için birkaç konuyu daha göz önünde bulundurmanız gerekir. Aşağıdaki bölümlerde, bir özellik tasarlanırken dikkate alınması gereken bazı hususlar tartışılacaktır. Bir öznitelik yazarken belirlemeniz gereken iki önemli şey vardır. Birincisi program özniteliğin uygulanabileceği öğeler ve ikincisi, öznitelik tarafından depolanacak olan bilgidir.
Öznitelik Kullanımı
AttributeUsage özniteliğini bir öznitelik sınıfına yerleştirmek, özniteliğin nerede kullanılabileceğini kontrol eder. Öznitelik için olası değerler, AttributeTargets numaralandırıcısında listelenir. AttributeUsage niteliğinin bir parçası olarak, bunlardan biri belirtilebilir veya bunların bir listesi birlikte ORed edilebilir.
Bir özniteliğin tek kullanımlık mı yoksa çok kullanımlı mı olduğunu belirtmek için AttributeUsage özniteliğini de kullanabilirsiniz. Bunu, AllowMultiple isimli parametre ile yaparsınız. Böyle bir özellik şuna benzer.
Öznitelik Parametreleri
Özniteliğin depolayacağı bilgiler iki gruba ayrılmalıdır: her kullanım için gerekli olan bilgiler ve isteğe bağlı öğeler.
Her kullanım için gereken bilgiler, öznitelik sınıfı için yapıcı aracılığıyla alınmalıdır. Bu, kullanıcıyı özniteliği kullandıklarında tüm parametreleri belirtmeye zorlar. İsteğe bağlı öğeler, kullanıcının hangi isteğe bağlı öğelerin uygun olduğunu belirtin.
Bir özniteliğin, farklı gerekli bilgilerle oluşturulabileceği birkaç farklı yolu varsa, her kullanım için ayrı oluşturucular bildirilebilir. İsteğe bağlı öğelere alternatif olarak ayrı oluşturucular kullanmayın.
Nitelikler bazı kodlarda tanımlandıktan sonra, nitelik değerlerini bulabilmek yararlıdır. Bunu yansıtma yoluyla yapabilirsiniz. Aşağıdaki kod, bir öznitelik sınıfını, özniteliğin bir sınıfa uygulanmasını ve özniteliği almak için sınıf üzerindeki yansımasını gösterir.
Main() işlevi, önce Complex türüyle ilişkili tür nesnesini alır. Ardından, türe eklenmiş tüm CodeReviewAttribute özniteliklerini yineler ve değerleri yazar. Alternatif olarak, kod, Get Custom Attributes çağrısındaki türü atlayarak tüm öznitelikleri alabilir.
GetCustomAttributes çağrısındaki false değeri, çalışma zamanına devralınan öznitelikleri yok saymasını söyler. Bu durumda, Complex’in temel sınıfındaki tüm nitelikleri yoksayar.
Örnekte, karmaşık tür için tür nesnesini typeof kullanarak elde edebilirsiniz.
Delegeler ve Anonim Yöntemler
Delegeler, çağıran ve uygulayıcı arasında bir sözleşme belirtmeleri açısından arabirimlere benzer. Yine de, tüm arabirimi belirtmek yerine, bir temsilci yalnızca tek bir işlevin biçimini belirtir. Ayrıca, arabirimler derleme zamanında oluşturulur ve bir türün sabit bir yönüdür, oysa temsilciler çalışma zamanında oluşturulur ve orijinal olarak birlikte çalışmak üzere tasarlanmamış nesneler arasında geri aramaları dinamik olarak bağlamak için kullanılabilir.
Temsilciler, .NET Framework tarafından kullanılan genel amaçlı bildirim mekanizmaları olan C#’daki olayların temeli olarak kullanılır.
Nitelik Yayınları
Nitelik yayınları mobil kütüphane şifresi
Nitelik Yayınları akıllı tahta
Nitelik Yayınları akıllı tahta Öğretmen
Nitelik Yayınları Z Kitap
Nitelik Yayınları öğretmen Girişi
Nitelik yayınları anahtar kodu
Nitelik Yayınları üye ol
Delegeleri Kullanma
Temsilcinin belirtimi, işlevin biçimini belirler ve temsilcinin bir örneğini oluşturmak için bu biçimle eşleşen bir işlev kullanmanız gerekir. Delegelere bazen güvenli işlev işaretçileri denir, bu kötü bir benzetme değildir, ancak işlev işaretçileri olarak hareket etmekten çok daha fazlasını yaparlar.
Dinamik yapıları nedeniyle, kullanıcı davranışını değiştirmek isteyebileceği zaman temsilciler kullanışlıdır. Örneğin, bir toplama sınıfı sıralama uygularsa, farklı sıralama düzenlerini desteklemek isteyebilir. Karşılaştırma işlevini tanımlayan bir temsilciye göre sıralamayı kontrol edebilirsiniz.
Container sınıfında tanımlanan temsilci, karşılaştırılacak iki nesneyi parametre olarak alır ve iki nesnenin sıralamasını belirten bir tamsayı döndürür. Çalışan sınıfının bir parçası olarak bu temsilciyle eşleşen iki statik işlev bildirilir ve her işlev farklı bir sıralama türünü tanımlar.
Kapsayıcının sıralanması gerektiğinde, kullanılması gereken sıralamayı açıklayan bir temsilci iletebilirsiniz ve sort işlevi sıralamayı yapacaktır. (Gerçekten uygulansaydı olurdu.)
C++’a aşina olan kullanıcılar, temsilciler ve C++ işlev işaretçileri arasında pek çok benzerlik bulacaktır, ancak bir temsilci için bir işlev işaretçisinden daha fazlası vardır.
Windows işlevleriyle uğraşırken, belirli bir olay meydana geldiğinde çağrılması gereken bir işlev işaretçisini iletmek oldukça yaygındır. C++ işlev işaretçileri yalnızca statik işlevlere atıfta bulunabildiği ve üye işlevlere1 başvuramadığı için, olayın hangi nesneye karşılık geldiğini bilmesi için bazı durum bilgilerini işleve iletmenin bir yolunu bulmanız gerekir.
Çoğu işlev, geri arama işlevine iletilen bir işaretçi alarak bununla ilgilenir. Parametre (en azından C++’da) daha sonra bir sınıf örneğine dönüştürülür ve ardından olay işlenir. C#’ta, temsilciler hem çağrılacak bir işlevi hem de onu çağırmak için bir örneği kapsülleyebilir, böylece örnek bilgilerini taşımak için fazladan bir parametreye ihtiyacınız olmaz. Bu aynı zamanda güvenli bir tip mekanizmasıdır, çünkü örnek, çağrılacak işlevin belirtilmesiyle aynı anda belirtilir.
Daha önce belirtildiği gibi, bir temsilci birden fazla işleve başvurabilir. Temel olarak, bir temsilci, sırayla çağrılması gereken işlevlerin bir listesini içerir. Delegate sınıfı, işlevler sağlar; iki temsilci alırlar ve her ikisini de içine alan veya bir temsilciyi diğerinden çıkaran birini döndürürler.
İki temsilciyi birleştirmek için Delegate.Combine() işlevini kullanabilirsiniz. Örneğin, birden fazla işlevi çağırmak için önceki örneği kolayca değiştirebilirsiniz.
Bununla birlikte, bu yaklaşımın birkaç sorunu vardır. İlki, en iyi biçim olmadığıdır. Ancak daha da önemlisi, derleme zamanında tip açısından güvenli olmamasıdır; Delegate.Combine(), Delegate türünü hem alır hem de döndürür, böylece derleme zamanında delegelerin uyumlu olup olmadığını bilmenin hiçbir yolu yoktur.
Bu sorunları ele almak için C#, += ve -= işleçlerinin Delegate.Combine() ve Delegate.Remove()’u çağırmak için kullanılmasına izin verir ve türlerin uyumlu olmasını sağlar. Örnekteki aramayı bu şekilde değiştirebilirsiniz.
Çağrıldıklarında, bir temsilci içinde kapsüllenen alt temsilciler, temsilciye eklendikleri sırayla eşzamanlı olarak çağrılır. Alt delegelerden biri tarafından bir istisna oluşturulursa, kalan alt delegeler çağrılmaz. Bu davranış istenmiyorsa, temsilciden alt temsilciler listesini (diğer adıyla çağrı listesi) alabilir ve her bir alt temsilciyi doğrudan arayabilirsiniz.
Web sitelerinizi, arama motorlarında en yukarı getirmek adına sizlere 3 adet paket öneriyoruz. Bu paketler sayesinde web siteleriniz aramalarda 1 yıl içerisinde en yukarıya tırmanacaktır.
1) Backlink Paketi 50 $ (Yıllık Ücret)
2) Hızlandırma Paketi 300 $ (Yıllık Ücret)
3) Kelime Yönlendirme Paketi 150 $ (Aylık Ücret)