SORU
21 AĞUSTOS 2008, PERŞEMBE


.Nitelikleri nelerdir?NET:

Onlar, ne iyi gelir nelerdir, ve nasıl kendi öznitelikleri oluşturabilirim?

CEVAP
21 AĞUSTOS 2008, PERŞEMBE


Meta. Nesneler hakkında veri/yöntemleri/özellikleri.

Sipariş özellikleri UI görünmelidir ne kolay kontrol edebiliyorum yani DisplayOrder. bir Öznitelik adı ilan verebilirim örneğin: Sonra öznitelikleri özü ve UI öğeleri uygun şekilde sipariş bir sınıf eklemek ve bazı GUI bileşenleri yazabilirim.

public class DisplayWrapper
{
    private UnderlyingClass underlyingObject;

    public DisplayWrapper(UnderlyingClass u)
    {
        underlyingObject = u;
    }

    [DisplayOrder(1)]
    public int SomeInt
    {
        get
        {
            return underlyingObject .SomeInt;
        }
    }

    [DisplayOrder(2)]
    public DateTime SomeDate
    {
        get
        {
            return underlyingObject .SomeDate;
        }
    }
}

Someİnt her zaman özel benim GUİ bileşenleri ile çalışırken SomeDate önce görüntülenen böylece sağlanması.

Ancak, onları doğrudan kodlama ortamı dışında en sık kullanılan görürsünüz. Örneğin Windows Tasarımcısı özel yapılmış nesneler ile başa çıkmak için nasıl biliyor bu kadar kapsamlı bir şekilde onları kullanır. Gibi yani BrowsableAttribute kullanarak:

[Browsable(false)]
public SomeCustomType DontShowThisInTheDesigner
{
    get{/*do something*/}
}

Tasarımcısının Properties penceresinde kullanılabilir özellikler bu listeye tasarım anında örneğin söyler.

Sanaolabilirayrıca kod nesil için bunları kullanmak, ön-derleme işlemleri (Post-Sharp gibi) veya çalışma zamanı Yansıması gibi işlemler.Yayarlar. Örneğin, şeffaf kodunu oluşturan her bir arayıp kez sarılmış bu profil için bir kod bit yazabilirsiniz. "Opt-out" belirli yöntemler üzerine yerleştirdiğiniz bir öznitelik). bu zamanlama olabilir

public void SomeProfilingMethod(MethodInfo targetMethod, object target, params object[] args)
{
    bool time = true;
    foreach (Attribute a in target.GetCustomAttributes())
    {
        if (a.GetType() is NoTimingAttribute)
        {
            time = false;
            break;
        }
    }
    if (time)
    {
        StopWatch stopWatch = new StopWatch();
        stopWatch.Start();
        targetMethod.Invoke(target, args);
        stopWatch.Stop();
        HandleTimingOutput(targetMethod, stopWatch.Duration);
    }
    else
    {
        targetMethod.Invoke(target, args);
    }
}

Onları ilan etmek kolay, sadece Öznitelik devralan bir sınıf olun.

public class DisplayOrderAttribute : Attribute
{
    private int order;

    public DisplayOrderAttribute(int order)
    {
        this.order = order;
    }

    public int Order
    {
        get { return order; }
    }
}

Ve özniteliği kullandığınızda unutmayın ihmal soneki "" derleyici sizin için katacak. özelliği olabilir

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Christian Atlas

    Christian At

    26 Mart 2009
  • Justin Case

    Justin Case

    3 EKİM 2011
  • Machinima

    Machinima

    17 Ocak 2006