2012-11-14 11 views
8

Etwas, das die Schnittstelle ICustomAttributeProvider implementiert, können Sie benutzerdefinierte Attribute erhalten, die über die Methode GetCustomAttributes angewendet wurden. Wie ich es verstehe, ist ein benutzerdefiniertes Attribut im Grunde eine spezielle Klasse (endend in "Attribut" und erweitert die Attribute Klasse), die erstellt wird, um etwas wie eine Methode oder Klasse mit der entsprechenden Syntax ([FooAttribute] direkt vor der Methode/Klasse usw. in C# zum Beispiel). Aber wenn das ein benutzerdefiniertes Attribut ist, was ist ein nicht -custom Attribut? Ich dachte, dass Attribute, die mit .NET gebündelt wurden, nicht benutzerdefiniert waren, aber GetCustomAttributes gibt mir sogar Attribute wie System.ThreadStaticAttribute zurück, die sehr wichtig für das .NET-Framework sind.Benutzerdefinierte vs. nicht benutzerdefinierte Attribute?

Gibt es so etwas wie ein nicht benutzerdefiniertes Attribut oder ist "benutzerdefiniertes Attribut" nur eine Tautologie?

Antwort

2

Ich weiß nicht, ob die folgende irgendeine Bedeutung hat, aber wenn Sie sagen

var a = typeof(string).Attributes; 

Sie einen Wert eines Flags enum-Typ erhalten genannt TypeAttributes. Vielleicht sind diese Flags die "nicht-benutzerdefinierten" Attribute des Typs?

+0

Ich denke, das ist wahrscheinlich ungefähr richtig. Benutzerdefinierte Attribute sind Dinge, die keine "Typattribute" sind. – Jez

+0

Zur weiteren Klarstellung lese ich dies nur auf MSDN: * "Fast allen Reflection-Klassen können Attribute zugeordnet werden. Attribute können Standard (öffentlich, privat, HelpString) oder benutzerdefiniert sein." * – Jez

5

Alles, was von Attribute abgeleitet ist, ist ein benutzerdefiniertes Attribut.

"Attribut" ist ein allgemeiner Begriff. Objekte in der realen Welt haben unzählige Attribute. Klassen, Mitglieder und Parameter haben alle Attribute, die wir beschreiben können - Namen, Typen, Accessoren, die Anzahl der Mitglieder, Vererbungsinformationen, usw.

Benutzerdefinierte Attribute sind Dinge, die wir tack auf - Aspekte die wir assoziieren und beschreiben wollen, die aber nicht intrinsisch sind.

2

Siehe Wikipedia unter Angabe:

Entwickler Metadaten zu ihrem Code durch Attribute hinzufügen können. Dort sind zwei Arten von Attributen, benutzerdefinierte und Pseudo-benutzerdefinierte Attribute, und für den Entwickler diese haben die gleiche Syntax. Attribute im Code sind Nachrichten an den Compiler, um Metadaten zu generieren. In CIL werden Metadaten wie als Vererbung Modifikatoren, Bereich Modifikatoren und fast alles, was weder Opcodes noch Streams ist, auch als Attribute bezeichnet.

Siehe die CLI-Spezifikation über Erweitern von Metadaten auch, wo Verweise auf den Begriff „custom“ zu finden sind Attribute (zB I.9.7 in http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-335.pdf)