İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır
Zafer Teker
tekzaf@yahoo.com

.Net'te Attribute Kullanımı

Attribute Nedir ?

Attribute'ler çalışma ortamına (runtime ortamı) bilgi vermek için kullanılan etiketlerdir. Attribute'ler herhangi bir method,class,struct vs.. hakkında bilgi verebilir. Bu yazıda C#.NET'te attribute'lerden bahsedilecektir.

Bir Attribute [ ] parantezleri içerisinde yazılırlar. Attribute'lerin parametreleri olabilir. Bu paramtreler fonksiyonlardaki gibi , ile verilebildiği gibi isim=değer şeklinde de verilebilir.

[attribute(paramtre1,paramtre2,..)]

veya

[attribute(paramtre1=deger1,paramtre2=deger2)]

şeklinde verilebilir.

Attribute'ler etkiledikleri elementin hemen üstünde tanımlanırlar. Bir elemente birden fazla attribute uygulanabilir.

Koşul (Conditional) Attribute'leri

Bu tür attribute'ler genellikle debug veya test için kullanılmaktadır. Örneğin bir method'un sadece debug ederken çalışmasını sağlayabilirsiniz.

[Conditional ("DEBUGGING")]
public static void MyMethod( ){
    ...
}

burada DEBUGGING define edilmiş bir semboldur. Eğer bu sembol #define DEBUGGING şeklinde tanımlanırsa myMethod kullanılabilir. Tanımlanmassa myMethod çağrılsa bile dikkate alınmaz. Çünkü Conditional ("DEBUGGING") ile DEBUGGING sembol'ünün tanımlanması gerekir.

DllImport Attribute

Bu attribute unmanaged code (CLE standartları dışında yaratılan kod- .NET kullanılarak yaratılmamış diyebiliriz) ile yaratılmış bir dll'deki method'ları kullanmaya yarar.

[DllImport("foo.dll", EntryPoint="MyFunction")]
public static extern int MyFunction(string parametre1); 

şeklinde tanımlanır. Bu attribute'nin kullanılması için System.Runtime.InteropServices çağrılmalıdır. MyFunction method'unu kullanacağımızı belirtiyoruz. Hemen altında da method'u tanımlıyoruz. Kullanırken de normal bir method çağırır gibi çağırıyoruz.

int a=MyFunction("test");

DllImport ile system native kodlarını kullanabiliyorsunuz. Örneğin bip çaldırabilir, ekranın print screen'ini alabilir, desktop'taki saati değiştirebilirsiniz. Sonuç olarak dllimport kernel32.dll,user32.dll gibi windows dll'lerine erişmenizi sağlar.

Custom Attribute'ler- Kullanıcının yarattığı attribute'ler

Bir attribute yaratmak için system.Attribute class'ını extend etmeniz gerekir. AttributeUsage ile de yarattığınız attribute'nin neler(Method,Class,Struct vs) üzerinde etkili olacağını söylemeniz gerekir.

[AttributeUsage(AttributeTargets.Method)]
public class MyAttribute: System.Attribute{
 ... 
}

Yukarıda görüldüğü gibi bir MyAttribute class'ı yarattık. [AttributeUsage(AttributeTargets.Method)] ile de bu attribute'nin method'ları etkileyeceğini söylüyoruz. Attribute'lere isim=deger şeklinde paramtre vermek istiyorsanız isim property'isini yaratmanız gerekir.

public string Isim{
	get{return isim;}
	set{isim=value;}
}

Bir class'ın Metadata'sını inceleme

Metadata bir class'ı oluşturan birimler hakkındaki bilgilere denir. Bir class'ın attribute'leri hakkında bilgi edilinebilir. Önce class'ın bilgisi alınır. Bunun için MemberInfo class'ı kullanılır.

using System.Reflection;

...

MemberInfo typeInfo=typeof(MyClass); 

daha sonra tüm attribute'lere erişilebilir.

object[ ] attrs = typeInfo.GetCustomAttributes(false);

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır