803 Stimmen

Nützlichste Attribute

Ich weiß, dass Attribute äußerst nützlich sind. Es gibt einige vordefinierte Attribute wie [Browsable(false)] mit dem Sie Eigenschaften auf der Registerkarte "Eigenschaften" ausblenden können. Hier ist eine gute Frage zur Erklärung von Attributen: Was sind Attribute in .NET?

Welche vordefinierten Attribute (und deren Namespace) verwenden Sie tatsächlich in Ihren Projekten?

23voto

Felix K. Punkte 6072

El DebuggerHiddenAttribute die es erlaubt, nicht in Code einzugreifen, der nicht debuggt werden soll.

public static class CustomDebug
{
    [DebuggerHidden]
    public static void Assert(Boolean condition, Func<Exception> exceptionCreator) { ... }
}

...

// The following assert fails, and because of the attribute the exception is shown at this line
// Isn't affecting the stack trace
CustomDebug.Assert(false, () => new Exception()); 

Außerdem wird verhindert, dass Methoden im Stacktrace angezeigt werden, was nützlich ist, wenn eine Methode eine andere Methode umschließt:

[DebuggerHidden]
public Element GetElementAt(Vector2 position)
{
    return GetElementAt(position.X, position.Y);
}

public Element GetElementAt(Single x, Single y) { ... }

Wenn Sie jetzt anrufen GetElementAt(new Vector2(10, 10)) und bei der umschlossenen Methode ein Fehler auftritt, zeigt der Aufrufstapel nicht die Methode an, die die Methode aufruft, die den Fehler auslöst.

21voto

configurator Punkte 39516

DesignerSerializationVisibilityAttribute ist sehr nützlich. Wenn Sie einem Steuerelement oder einer Komponente eine Laufzeiteigenschaft zuweisen und nicht wollen, dass der Designer sie serialisiert, verwenden Sie sie wie folgt:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public Foo Bar {
    get { return baz; }
    set { baz = value; }
}

17voto

Marc Gravell Punkte 970173

Nur wenige Attribute erhalten Compiler-Unterstützung, aber eine sehr interessante Verwendung von Attributen ist in AOP: PostSharp verwendet Ihre maßgeschneiderten Attribute, um IL in Methoden zu injizieren, was alle Arten von Fähigkeiten ermöglicht... log/trace sind triviale Beispiele - aber einige andere gute Beispiele sind Dinge wie die automatische Implementierung von INotifyPropertyChanged ( aquí ).

Einige, die auftreten und sich direkt auf den Compiler oder die Laufzeitumgebung auswirken :

  • [Conditional("FOO")] - Aufrufe dieser Methode (einschließlich der Auswertung der Argumente) erfolgen nur, wenn das Symbol "FOO" während der Erstellung definiert ist.
  • [MethodImpl(...)] - verwendet, um einige Dinge wie Synchronisierung, Inlining
  • [PrincipalPermission(...)] - verwendet, um automatisch Sicherheitsüberprüfungen in den Code einzubauen
  • [TypeForwardedTo(...)] - verwendet, um Typen zwischen Baugruppen zu verschieben ohne Neuaufbau der Anrufer

Für Dinge, die manuell über Reflexion geprüft werden - ich bin ein großer Fan der System.ComponentModel Attribute; Dinge wie [TypeDescriptionProvider(...)] , [TypeConverter(...)] und [Editor(...)] die das Verhalten von Typen in Datenbindungsszenarien (d. h. dynamische Eigenschaften usw.) völlig verändern können.

16voto

FlySwat Punkte 165766

Wenn ich eine Code-Coverage-Crawl machen würde, wären diese beiden ganz vorne mit dabei:

 [Serializable]
 [WebMethod]

15voto

wusher Punkte 12051

Ich habe die [DataObjectMethod] in letzter Zeit. Sie beschreibt die Methode, damit Sie Ihre Klasse mit der ObjectDataSource (oder anderen Steuerelementen) verwenden können.

[DataObjectMethod(DataObjectMethodType.Select)] 
[DataObjectMethod(DataObjectMethodType.Delete)] 
[DataObjectMethod(DataObjectMethodType.Update)] 
[DataObjectMethod(DataObjectMethodType.Insert)] 

Mehr Infos

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X