Frage

Ich habe den folgenden code:

[DefaultValue(100)]
[Description("Some descriptive field here")]
public int MyProperty{...} 

Die Funktionalität von den oben snippit scheint klar genug, ich habe keine Ahnung, wie ich es verwenden können, um nützliche Dinge tun.Ich bin nicht einmal sicher, was Namen zu geben!

Weiß jemand, wo ich weitere Informationen finden/eine Anleitung auf diese Eigenschaft Attribute?Ich wäre auch daran interessiert, in jedem Roman / nützliche Aufgaben dieser Funktion tun können.

War es hilfreich?

Lösung

Die Menschen haben bereits unter den UI-Aspekt - Attribute haben andere verwendet, obwohl...für Beispiel, Sie werden weitgehend in die meisten Serialisierungs-frameworks.Einige Attribute sind Besondere Behandlung durch den compiler - zum Beispiel, [PrincipalPermission(...)] fügt deklarative Sicherheit um eine Methode, mit der Sie (automatisch) überprüfen Sie, dass der Benutzer die geeignete Zugang.

Fügen Sie Ihre eigene spezielle Behandlung, die Sie verwenden können, PostSharp;es gibt viele gute Beispiele für die Verwendung von PostSharp zu tun AOP Dinge, wie das protokollieren oder einfach nur code-Vereinfachungen, wie die mit automatische INotifyPropertyChanged Umsetzung.

Andere Tipps

Die Funktionalität von den oben genannten snippit scheint klar genug,

Vielleicht nicht, wie viele Leute denken, dass [DefaultValue()] sets der Wert der Immobilie.Tatsächlich, alle es tut, sagen einige visual-designer (z.B.Visual Studio), was den code ist die Standard Wert zu.So ist es weiß zu Fett der Wert in der Eigenschaft Fenster, wenn es sich auf etwas anderes.

Diejenigen, die in Ihrem Beispiel verwendet wird, durch die visual designer (d.h.MS Expression Blend und Visual Studio-designer) zu geben, die Hinweise in der designer-Benutzeroberfläche.

Beachten Sie, dass Sie Metadaten und wird nicht Einfluss auf die Eigenschaft der Logik.Einstellung DefaultValue zum Beispiel wird die-Eigenschaft nicht zu, dass der Wert standardmäßig, müssen Sie dies manuell tun.

Wenn Sie aus irgendeinem Grund möchten Sie Zugriff auf diese Attribute, Sie würde haben zu verwenden Sie reflektion.

Finden MSDN für mehr Informationen zu designer-Attributen.

Sie werden Attribute genannt und es gibt eine Menge von Informationen, die in msdn, z.B. http://msdn.microsoft.com/en-us/library/z0w1kczw.aspx

Im Allgemeinen werden Sie nicht "tun" etwas auf Ihre eigenen, Sie sind verwendet durch einige andere code, der Ihre Klasse.XmlSerialization ist ein gutes Beispiel:XmlSerializer (bereitgestellt von Microsoft, der als Teil des Rahmens) kann fast jede Klasse (es gibt eine Reihe von Anforderungen, die auf die Klasse, obwohl) - es verwendet reflektion, um zu sehen, welche Daten enthalten sind, die in der Klasse.Sie können Attribute verwenden (definiert zusammen mit XmlSerializer), um die Art und Weise ändern XmlSerializer serialisieren Ihrer Klasse (z.B.erzählen Sie speichern die Daten als Attribut anstelle eines Elements).

Wir verwenden es, um zu definieren, welche grafischen designer geladen werden soll, zu konfigurieren eine Instanz eines bestimmten Typs.

Das heißt, wir haben eine Art workflow-designer, die Lasten alle möglichen Befehl Arten aus einer assembly.Dieser Befehl Arten haben Eigenschaften, die konfiguriert werden müssen, so wird jeder Befehl Typ hat die Notwendigkeit eines anderen designer (usercontrol).

Betrachten Sie beispielsweise den folgenden Befehl geben (die sogenannte composite-in unserer Lösung)

[CompositeMetaData("Delay","Sets the delay between commands",1)]
[CompositeDesigner(typeof(DelayCompositeDesigner))]
public class DelayComposite : CompositeBase 
{
       // code here
}

Diese Informationen wird an zwei Orten

1) Wenn der designer erstellt eine Liste der Befehle, es verwendet die CompositeMetaData weitere Informationen zu dem Befehl.

2) Wenn der Benutzer fügt einen Befehl an den designer und die designer erstellt eine Instanz der Klasse, sieht es bei der CompositeDesigner Eigenschaft, erstellt eine neue Instanz des angegebenen Typs (usercontrol) und fügt es der visual designer.

Betrachten Sie den folgenden code, den wir verwenden, um laden Sie die Befehle in unserer "toolbar":

foreach (Type t in assembly.GetExportedTypes())  
{
    Console.WriteLine(t.Name);

    if (t.Name.EndsWith("Composite"))
    {
        var attributes = t.GetCustomAttributes(false);
        ToolboxListItem item = new ToolboxListItem();

        CompositeMetaDataAttribute meta = (CompositeMetaDataAttribute)attributes
                              .Where(a => a.GetType() == typeof(Vialis.LightLink.Attributes.CompositeMetaDataAttribute)).First();
        item.Name = meta.DisplayName;
        item.Description = meta.Description;
        item.Length = meta.Length;
        item.CompositType = t;

        this.lstCommands.Items.Add(item);
    }                           
}

Wie Sie sehen können, für jeden Typ in der assembly, aus denen der name endet mit "Composite", wir Holen die benutzerdefinierten Attribute, und diese Informationen verwenden, um füllen Sie unseren ToolboxListItem Instanz.

Wie für das laden der designer das Attribut retreived wie diese:

var designerAttribute = (CompositeDesignerAttribute)item.CompositType.GetCustomAttributes(false)
                         .Where(a => a.GetType() == typeof(CompositeDesignerAttribute)).FirstOrDefault();

Dies ist nur ein Beispiel, wie Sie möglicherweise in der Lage sein zu verwenden von benutzerdefinierten Attributen,

Ich hoffe, das gibt Ihnen ein Ort, um zu starten.

Diese Attribute passen Sie die design-time-Erfahrung.

http://msdn.microsoft.com/en-us/library/a19191fh.aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top