C# - Custom-Attribut-Parameter
Sah ich diese Antwort von diesem link Hinzufügen von Parametern zu benutzerdefinierten Attributen wie ist das hinzufügen von Parametern, auf die das Benutzerdefinierte Attribut
class MyCustomAttribute : Attribute {
public int[] Values { get; set; }
public MyCustomAttribute(params int[] values) {
this.Values = values;
}
}
[MyCustomAttribute(3, 4, 5)]
class MyClass { }
Nun Frage ich mich, wenn es nicht so schreiben?
class MyCustomAttribute : Attribute {
private int[] _values;
public MyCustomAttribute(params int[] values) {
_values = values;
}
}
[MyCustomAttribute(3, 4, 5)]
class MyClass { }
Änderte ich die Eigenschaft Werte in eine variable _values.
Von mir aus auch privat, und es funktioniert gut, wenn ich es versuchte.
Kann jemand mich aufklären, warum die akzeptierte Antwort ist gültig?
"Kann jemand mich aufklären, warum die akzeptierte Antwort ist gültig?" -- Du noch nichts gepostet zu behaupten, dass es ungültig. Am besten hast du gezeigt, dass es mehr als einen Weg, der funktioniert. Also, warum Sie denken, dass es etwas falsch mit der Antwort hast du gelesen?
Fragen Sie sich, was Sie tun können, mit Ihrem benutzerdefinierten Attributs. Hinweis: der Haupt-Zweck der Attribute ist nicht zu jus instanziiert.
Fragen Sie sich, was Sie tun können, mit Ihrem benutzerdefinierten Attributs. Hinweis: der Haupt-Zweck der Attribute ist nicht zu jus instanziiert.
InformationsquelleAutor | 2016-10-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Akzeptierte Antwort verwendet den öffentlichen Eigentums statt ein eigenes Feld. Der nutzen von öffentlichem Eigentum ist, kann man auch weglassen Konstruktors und liefern die Werte der Eigenschaften in der Standard-Konstruktor.
Ich ändern Ihren ersten code, den man mit öffentlichen Eigentum, so etwas wie dieses.
InformationsquelleAutor Han
Für
[MyCustomAttribute(3, 4, 5)]
die parameter-Liste ist Unbenannt, so dass der Konstruktor vonMyCustomAttribute
verwendet wird.Daher ist es egal, wenn es einen öffentlichen
Values
Eigenschaften.In deinem ersten code-Beispiel ist es akzeptabel, zu verwenden
[MyCustomAttribute(3, 4, 5)]
und[MyCustom(Values = new[] {3, 4, 5})]
.Das zweite Codebeispiel "nur" akzeptiert
[MyCustomAttribute(3, 4, 5)]
.Beide codes sind akzeptabel. Finden Sie in der MSDN-Beispiel in diesem link. Es ist ähnlich zu dem zweiten code. Siehe auch meine Antwort für eine Variante Ihrer ersten code.
Ich habe Hinzugefügt, die zeigen, dass beide Beispiele sind korrekt. Der einzige Unterschied ist, wie der integer-array bereitgestellt wird (über den Konstruktor oder über die Eigenschaft setter).
InformationsquelleAutor Ralf Bönning
Gibt es Unterschiede, und es ist alles über
reflection
.Wichtigsten unter Ihnen ist die Geläufigkeit, die wir bekommen - wir konnten entweder den Konstruktor oder die
Values
Eigenschaft.Ein weiterer Faktor ist
reflection
um das Eigentum; Mit derValues
Feldpublic
wir könnten verwenden Sie die unten, um die details zu erhalten, aber nicht mitprivate
:InformationsquelleAutor Lijo Joseph