[AttributeUsage(AttributeTargets.All)] public class RemarkAttribute : Attribute {
string pri_remark; // Π±Π°Π·ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° Remark
// ΠΡΠΎ ΠΏΠΎΠ»Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, public string Supplement;
public RemarkAttribute(string comment) { pri_remark = comment;
Supplement = "ΠΡΡΡΡΡΡΠ²ΡΠ΅Ρ";
}
public string Remark { get {
return pri_remark;
}
}
}
ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΏΠΎΠ»Π΅ Supplement ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ "ΠΡΡΡΡΡΡΠ²ΡΠ΅Ρ". ΠΡΡΠ³ΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π° ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ Π΅ΠΌΡ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ. ΠΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠΎΠ»Π΅ Supplement ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠΊΡΡΡΡΠΌ Π² ΠΊΠ»Π°ΡΡΠ΅ RemarkAttribute, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.
[RemarkAttribute("Π ΡΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π°ΡΡΠΈΠ±ΡΡ.",
Supplement = "ΠΡΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ.")] class UseAttrib {
// ...
}
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ ΠΎΡΠΎΠ±ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π²ΡΠ·ΠΎΠ² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΊΠ»Π°ΡΡΠ° RemarkAttribute. Π ΡΡΠΎΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ ΠΏΠ΅ΡΠ²ΡΠΌ, ΠΊΠ°ΠΊ ΠΈ ΠΏΡΠ΅ΠΆΠ΄Π΅, ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, Π° Π·Π° Π½ΠΈΠΌ ΡΠ΅ΡΠ΅Π· Π·Π°ΠΏΡΡΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Supplement, ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. Π Π½Π°ΠΊΠΎΠ½Π΅Ρ, Π·Π°ΠΊΡΡΠ²Π°ΡΡΠ°Ρ ΡΠΊΠΎΠ±ΠΊΠ°, ), Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ Π²ΡΠ·ΠΎΠ² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎ-, ΡΠ°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ Π² Π²ΡΠ·ΠΎΠ²Π΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°. ΠΡΠΎΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠ±ΡΠΈΡΡ: ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π² ΡΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΎΠ½ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅, Π° ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ β Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΈ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌΡΠΌΠΈ ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Ρ Supplement Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π°ΡΡΠΈΠ±ΡΡΠ°.
// ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π°ΡΡΠΈΠ±ΡΡΠ°.
using System;
using System.Reflection;
[AttributeUsage(AttributeTargets.All)] public class RemarkAttribute : Attribute {
string pri_remark; // Π±Π°Π·ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° Remark
public string Supplement; // ΡΡΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ
public RemarkAttribute(string comment) { pri_remark = comment;
Supplement = "ΠΡΡΡΡΡΡΠ²ΡΠ΅Ρ";
}
public string Remark { get {
return pri_remark;
}
}
}
[RemarkAttribute("Π ΡΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π°ΡΡΠΈΠ±ΡΡ.",
Supplement = "ΠΡΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ.")] class UseAttrib {
// ...
}
class NamedParamDemo { static void Main() {
Type t = typeof(UseAttrib);
Console.Write("ΠΡΡΠΈΠ±ΡΡΡ Π² ΠΊΠ»Π°ΡΡΠ΅ " + t.Name + ": "); object[] attribs = t.GetCustomAttributes(false); foreach(object ΠΎ in attribs) {
Console.WriteLine (o);
}
// ΠΠ·Π²Π»Π΅ΡΡ Π°ΡΡΠΈΠ±ΡΡ RemarkAttribute.
Type tRemAtt = typeof(RemarkAttribute);
RemarkAttribute ra = (RemarkAttribute)
Attribute.GetCustomAttribute(t, tRemAtt);
Console.Write("ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ");
Console.WriteLine(ra.Remark);
Console.Write("ΠΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅: ") ;
Console.WriteLine(ra.Supplement);
}
}
ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
ΠΡΡΠΈΠ±ΡΡΡ Π² ΠΊΠ»Π°ΡΡΠ΅ UseAttrib: RemarkAttribute ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Π ΡΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π°ΡΡΠΈΠ±ΡΡ.
ΠΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅: ΠΡΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ.
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ Π²ΠΎΠΏΡΠΎΡΡ, ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠΎΠ±ΠΎ ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠ½ΡΡΡ, ΡΡΠΎ ΠΏΠΎΠ»Π΅ pri_remark Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΎ
Π·Π°ΠΊΡΡΡΠΎ Π² ΠΊΠ»Π°ΡΡΠ΅ RemarkAttribute. Π‘Π²ΠΎΠΉΡΡΠ²ΠΎ Remark ΡΠ°ΠΊΠΆΠ΅ Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ. ΠΠ°ΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΌΠΎΠ³ΡΡ ΡΠ»ΡΠΆΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡΠΊΡΡΡΡΠ΅ ΠΏΠΎΠ»Ρ ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°.
ΠΡΠΊΡΡΡΠΎΠ΅ ΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠ°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈ ΠΎΡΠΊΡΡΡΠΎΠ΅ ΠΏΠΎΠ»Π΅. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π½ΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Priority ΡΠΈΠΏΠ° int Π²Π²ΠΎΠ΄ΠΈΡΡΡ Π² ΠΊΠ»Π°ΡΡ RemarkAttribute.
// ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π°ΡΡΠΈΠ±ΡΡΠ°.
using System;
using System.Reflection;
[AttributeUsage(AttributeTargets.All)] public class RemarkAttribute : Attribute {
string pri_remark; // Π±Π°Π·ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° Remark
public string Supplement; // ΡΡΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ
public RemarkAttribute(string comment) { pri_remark = comment;
Supplement = "ΠΡΡΡΡΡΡΠ²ΡΠ΅Ρ";
Priority = 1;
}
public string Remark { get {
return pri_remark;
}
}
// ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, public int Priority { get; set; }
}
[RemarkAttribute("Π ΡΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π°ΡΡΠΈΠ±ΡΡ.",
Supplement = " ΠΡΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ.",
Priority = 10)] class UseAttrib {
// ...
}
class NamedParamDemo { static void Main() {
Type t = typeof(UseAttrib);
Console.Write("ΠΡΡΠΈΠ±ΡΡΡ Π² ΠΊΠ»Π°ΡΡΠ΅ " + t.Name + ": ");
object[] attribs = t.GetCustomAttributes(false); foreach(object ΠΎ in attribs) {
Console.WriteLine(o);
// ΠΠ·Π²Π»Π΅ΡΡ Π°ΡΡΠΈΠ±ΡΡ RemarkAttribute.
Type tRemAtt = typeof(RemarkAttribute);
RemarkAttribute ra = (RemarkAttribute)
Attribute.GetCustomAttribute(t, tRemAtt);
Console.Write("ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ") ;
Console.WriteLine(ra.Remark);
Console.Write("ΠΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅: ") ;
Console.WriteLine(ra.Supplement);
Console.WriteLine("ΠΡΠΈΠΎΡΠΈΡΠ΅Ρ: " + ra.Priority);
}
}
ΠΠΎΡ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
ΠΡΡΠΈΠ±ΡΡΡ Π² ΠΊΠ»Π°ΡΡΠ΅ UseAttrib: RemarkAttribute ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Π ΡΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π°ΡΡΠΈΠ±ΡΡ.
ΠΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅: ΠΡΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ.
ΠΡΠΈΠΎΡΠΈΡΠ΅Ρ: 10
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ°Π΅Ρ Π½Π° ΡΠ΅Π±Ρ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠ»Π°ΡΡΠΎΠΌ UseAttrib, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.
[RemarkAttribute("Π ΡΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π°ΡΡΠΈΠ±ΡΡ.",
Supplement = " ΠΡΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ.",
Priority = 10)] class UseAttrib {
// ...
}
ΠΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Supplement ΠΈ Priority Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π² ΠΊΠ°ΠΊΠΎΠΌ-ΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅. ΠΠΎΡΡΠ΄ΠΎΠΊ ΠΈΡ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ, Π½Π΅ ΠΌΠ΅Π½ΡΡ ΡΠ°ΠΌΠΈ Π°ΡΡΠΈΠ±ΡΡΡ.
Π ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π·Π°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΡΠΈΠΏ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π°ΡΡΠΈΠ±ΡΡΠ° (ΠΊΠ°ΠΊ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ, ΡΠ°ΠΊ ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ) Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΠΏΡΠΎΡΡΡΡ ΡΠΈΠΏΠΎΠ², object, Π’ΡΡΠ΅, ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎΠΌΠ΅ΡΠ½ΡΠΌ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΡΠΈΡ ΡΠΈΠΏΠΎΠ².
ΠΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ
Π C# ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ², Π½ΠΎ ΡΡΠΈ ΠΈΠ· Π½ΠΈΡ ΠΈΠΌΠ΅ΡΡ ΠΎΡΠΎΠ±ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π² ΡΠ°ΠΌΡΡ ΡΠ°Π·Π½ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ . ΠΡΠΎ Π°ΡΡΠΈΠ±ΡΡΡ AttributeUsage, Conditional ΠΈ Obsolete, ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΡΠ΅ Π΄Π°Π»Π΅Π΅ ΠΏΠΎ ΠΏΠΎΡΡΠ΄ΠΊΡ.
ΠΡΡΠΈΠ±ΡΡ AttributeUsage
ΠΠ°ΠΊ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡ ΡΠ°Π½Π΅Π΅, Π°ΡΡΠΈΠ±ΡΡ AttributeUsage ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠΈΠΏΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΠΌΡΠΉ Π°ΡΡΠΈΠ±ΡΡ. AttributeUsage β ΡΡΠΎ, ΠΏΠΎ ΡΡΡΠ΅ΡΡΠ²Ρ, Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° System. AttributeUsageAttribute. Π£ Π½Π΅Π³ΠΎ ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ:
AttributeUsage(AttributeTargets validOn)
Π³Π΄Π΅ validOn ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΠΌΡΠΉ Π°ΡΡΠΈΠ±ΡΡ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ AttributeTargets β ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π½ΠΈΠΆΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
ΠΠ
Assembly
Class
Constructor
Delegate
Enum
Event
Field
GenericParameter
Interface
Method
Module
Parameter
Property
ReturnValue
Struct
ΠΠ²Π° ΡΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΠΠ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠ°, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΊ ΠΏΠΎΠ»ΡΠΌ ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
AttributeTargets.Field I AttributeTargets.Property
Π ΠΊΠ»Π°ΡΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ° AttributeUsage ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π΄Π²Π° ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°. ΠΠ΅ΡΠ²ΡΠΌ ΠΈΠ· Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ AllowMultiple, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠΈΠΉ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΡΠ»ΠΈ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΡΡΠΈΠ½Π½ΠΎ, ΡΠΎ Π°ΡΡΠΈΠ±ΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈ ΡΠΎΠΌΡ ΠΆΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π½Π΅ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΠΎ. ΠΡΠΎΡΠΎΠΉ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, Inherited, ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΡΠ»ΠΈ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΡΡΠΈΠ½Π½ΠΎ, ΡΠΎ Π°ΡΡΠΈΠ±ΡΡ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ, Π° ΠΈΠ½Π°ΡΠ΅ ΠΎΠ½ Π½Π΅ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΡΡΡ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ AllowMultiple ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π»ΠΎΠΆΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (false), Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Inherited β ΠΈΡΡΠΈΠ½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (true).
Π ΠΊΠ»Π°ΡΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ° AttributeUsage ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ValidOn. ΠΠ½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° AttributeTargets, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠ΅Π΅ ΡΠΈΠΏΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΠΌΡΠΉ Π°ΡΡΠΈΠ±ΡΡ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ AttributeTargets .All.