8 Mart 2018 Perşembe

Attribute Sınıfı

Giriş

IsDefined metodu
Örnek
Elimizde şöyle bir kod olsun
class Thing 
{
  [QueryString]
  public int Id {get; set;}
  [QueryString]
  public string Name {get; set;}
  public object MetaData {get; set;}
}
Şöyle yaparız.
public static string MyExtensionMethod(this object obj)
{

  Type objType = obj.GetType();
  // Get properties marked with `[QueryString]`
  List<PropertyInfo> props = objType.GetProperties()
    .Where(p => Attribute.IsDefined(p, typeof(QueryStringAttribute)))
    .ToList();
  ...
}

Diğer

Kalıtım
Custom Attribute tanımlamak için System.Attribute sınıfından kalıtırız. Attribute tanımlarken AttributeUsage Anotasyonu da kullanılabilir.

Örnek
Şöyle yaparız.
public class FooAttribute : System.Attribute
{...}
Erişim
Örnek
Her hangi bir tipin atrribute bilgisine GetCustomAttributes() ile erişiriz. Şöyle yaparız.
x.GetCustomAttributes<MyCustomAttribute>()
  .Any(k => k.EnumType == enumType));
Constructor - Parametresiz Attribute
Custom Attribute için şöyle yaparız
[Foo]
public class MyClass
{
}

public class FooAttribute : Attribute
{
  public FoonAttribute()
  {
    ...
  }
}
Constructor - Tek Parametreli Attribute
Örnek
Tek parametre alan Custom Attribute için şöyle kullanacaksak
[Foo("hello")]
public class MyClass {}
string alan bir constructor sağlamamız gerekir. Şöyle yaparız.
public FooAttribute(string name)
{...}
Property
Örnek
Custom Attribute için property alacaksa yani şöyle kullanacaksak
[Foo(SpecialName = "Bob")]
class MyClass {}
SpecialName alanını sağlamamız gerekir. Şöyle yaparız.
public class FooAttribute : System.Attribute{
  public string SpecialName {get;set;}
  ...  
}
Örnek
Elimizde bir enum olsun.
public enum MyEnum
{
    MyType1,
    MyType2
}
Custom Attribute için şöyle yaparız.
public class MyCustomAttribute : Attribute
{
    public MyEnum EnumType { get; set; }
}
Bir sınıf ile kullanmak için şöyle yaparız.
public class MyBaseClass
{

}
[MyCustomAttribute(EnumType = MyEnum.MyType1)]
public class MySubClass : MyBaseClass
{

}

Hiç yorum yok:

Yorum Gönder