.NET Custom Attribute’lar ve Kullanımı

Attribute Nedir ?
Programın çalışma zamanı esnasında, üyelerin(metodlar, sınıflar vb.) davranışlarını değiştirebileceğimiz sınıflar diyebiliriz. Attribute sınıflarını aslında bir öğelere bir metadata olarak düşünebiliriz. Yani öğelere attribute tanımlıyoruz ve öğeler hakkındaki yardımcı bilgilere sahip olabiliyoruz ve bunlara göre programımızın akışını değiştirebiliyoruz. Ama burada not etmeniz gereken önemli birşey var; Attribute’lar öğelerin işleyişini değiştirmez, siz attribute’ları kullanarak programınızın akışını değiştirirsiniz. Kafa karışıklığı yaratmadan ne demek istediğimi aşağıdaki örneğe bakarak açıklamaya çalışayım 🙂
Yukarıdaki örnekte string türünde bir entity değişkenimizin olduğunu varsayalım. Bu değişkenimize StringLength attribute’unu tanımladık ve 500 değerini gönderdik. Yani Adi string değişkeninin artık bir metadata’sı var diyebiliriz ve Entity Framework artık bu metadata’ya bakarak string’in olması gereken maximum değeri anlayacak ve uygun değilse bir exception fırlatacak.  Peki kendi Attribute’ larımızı nasıl tanımlayacağız ? Biz de kendimize ait attribute tanımlasak işimiz daha da kolaylaşmaz mı ? 🙂 Hemen görelim.
Şöyle birşey düşündüm. Bir sınıf olsun ve her metodunu farklı developer geliştirmiş olsun. Hızlı bir şekilde her metodun developer’ına nasıl ulaşılır diye bir örnek kod parçacığı yazayım dedim. Pratikte işe yaramayabilir fakat Attribute’ları anlamanız açısından iyi olacağını düşündüm 🙂
Başlamadan önce her Attribute sınıfının System.Attribute’ tan türediğini öncelikle bilelim.
Yukarıdaki kod örneğinde ikinci bilmeniz gereken şey ise iki adet parametre tipinin olduğunu bilmek. Dikkat ederseniz GelistriciBilgisiAttribute sınıfı içerisinde Gelistirici öğesinin setter metodu bulunmamakta. Buna positional parameter adını vermekteyiz. Yani ilk Attribute tanımlama sırasında bu alan zorunlu olarak ilk olarak girilecektir. ReleaseSurum string değişkeninin hem setter hemde getter metodu bulunmaktadır. Bu tür tanımlamalara da named parameter adınını vermekteyiz. Bunların tanımlanması zorunlu değildir ve positional parametrelerden sonra ÖğeAdi=”değer” seklinde eklenebilirler. Positional Attribute’lara bu verileri girebilmek için ayrıca Constructor oluşturmamız gerekmektedir. Yukarıdaki örnekte Gelistirici bilgisinin setter metodu olmadığı için Constructor üzerinde set edilmesi gerekmektedir. Ayrıca Attribute’un hangi öğeler için geçerli kılınacağını ayarlayabilmemiz için AttributeUsage sınıfını kullanıyoruz ve tanımlamayı buna göre yapmamız gerekiyor. Yukarıdaki kod bloğunda:
Attribute’unu kullandık ve oluşturduğumuz Custom Attribute’un sadece metodlar için geçerli olacağını kendisine belirtiyoruz.
Şimdi gelelim tanımladığımız Attribute sınıfını nasıl kullanmamız gerektiğine. Öncelikle temsili takımımız tarafından geliştirilen sınıfımızı ekleyelim :).

Görmüş olduğumuz üzere ReleaseSurum degiskenini doldurmak zorunda değiliz. Buna named parameter diyoruz.  En son metodlarımızın kimler tarafından yazıldığını göstermek için otomatize edilen main metodumuzu ekliyoruz 🙂

Yorumlar

Bu blogdaki popüler yayınlar

VLSI Devre Tasarımı

Yapay Sinir Ağlarına Giriş

İnsan Bilgisayar Etkileşimi