8 Mart 2018 Perşembe

AttributeUsage Anotasyonu

AttributeTargets Alanı
Örnek
Şöyle yaparız. Bu attribute class ile kullanılır.
[AttributeUsage(AttributeTargets.Class)]
public class ServiceAttribute : Attribute
{
  public Type Service { get; }

  public ServiceAttribute(Type service)
  {
    Service = service;
  }
}
Şöyle yaparız
[Service(typeof(TruckService))]
public class Truck : Vehicle
// ...
Bu attribute'a erişmek için şöyle yaparız
public class VehicleServiceFactory
{
  public IVehicleService GetVehicleService(Vehicle vehicle)
  {
    var attributes = vehicle.GetType().GetCustomAttributes(
      typeof(ServiceAttribute), false);

    if (attributes.Length == 0)
      throw new NotSupportedException("Vehicle not supported");

      return (IVehicleService) Activator.CreateInstance(((
        ServiceAttribute)attributes[0]).Service);
  }
}
Inherited Alanı
Eğer bu alan true ise ata sınıf attribute tanımlarsa, alt sınıflara da geçer.
Örnek
Şöyle yaparız.
[AttributeUsage(Inherited=true)]
public class FooAttribute : System.Attribute
{
  private string name;

  public FooAttribute(string name)
  {
    this.name = name;
  }

  public override string ToString() { return this.name; }
}
Bu durumda çıktı olarak "hello" görürüz.
[Foo("hello")]
public class BaseClass {}

public class SubClass : BaseClass {}

// outputs "hello"
Console.WriteLine(typeof(SubClass).GetCustomAttributes().First());


Hiç yorum yok:

Yorum Gönder