<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FC_Sharp%2FLanguage_Basics%2FAttribute</id>
		<title>Csharp/C Sharp/Language Basics/Attribute - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FC_Sharp%2FLanguage_Basics%2FAttribute"/>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/C_Sharp/Language_Basics/Attribute&amp;action=history"/>
		<updated>2026-04-30T02:22:57Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://nfex.ru/index.php?title=Csharp/C_Sharp/Language_Basics/Attribute&amp;diff=700&amp;oldid=prev</id>
		<title> в 15:31, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/C_Sharp/Language_Basics/Attribute&amp;diff=700&amp;oldid=prev"/>
				<updated>2010-05-26T15:31:18Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 15:31, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://nfex.ru/index.php?title=Csharp/C_Sharp/Language_Basics/Attribute&amp;diff=701&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/C_Sharp/Language_Basics/Attribute&amp;diff=701&amp;oldid=prev"/>
				<updated>2010-05-26T11:39:34Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==A simple attribute example==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
using System;  &lt;br /&gt;
using System.Reflection; &lt;br /&gt;
  &lt;br /&gt;
[AttributeUsage(AttributeTargets.All)] &lt;br /&gt;
class RemarkAttribute : Attribute { &lt;br /&gt;
  string remarkValue; &lt;br /&gt;
 &lt;br /&gt;
  public RemarkAttribute(string comment) { &lt;br /&gt;
    remarkValue = comment; &lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
  public string remark { &lt;br /&gt;
    get { &lt;br /&gt;
      return remarkValue; &lt;br /&gt;
    } &lt;br /&gt;
  } &lt;br /&gt;
}  &lt;br /&gt;
 &lt;br /&gt;
[RemarkAttribute(&amp;quot;This class uses an attribute.&amp;quot;)] &lt;br /&gt;
class UseAttrib { &lt;br /&gt;
  // ... &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public class AttribDemo {  &lt;br /&gt;
  public static void Main() {  &lt;br /&gt;
    Type t = typeof(UseAttrib); &lt;br /&gt;
 &lt;br /&gt;
    Console.Write(&amp;quot;Attributes in &amp;quot; + t.Name + &amp;quot;: &amp;quot;); &lt;br /&gt;
 &lt;br /&gt;
    object[] attribs = t.GetCustomAttributes(false);  &lt;br /&gt;
    foreach(object o in attribs) { &lt;br /&gt;
      Console.WriteLine(o); &lt;br /&gt;
    } &lt;br /&gt;
 &lt;br /&gt;
    Console.Write(&amp;quot;Remark: &amp;quot;); &lt;br /&gt;
 &lt;br /&gt;
    // Retrieve the RemarkAttribute. &lt;br /&gt;
    Type tRemAtt = typeof(RemarkAttribute); &lt;br /&gt;
    RemarkAttribute ra = (RemarkAttribute) &lt;br /&gt;
          Attribute.GetCustomAttribute(t, tRemAtt); &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    Console.WriteLine(ra.remark); &lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Attribute in class inheritance==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
using System;&lt;br /&gt;
using System.Security;&lt;br /&gt;
using System.Security.Permissions;&lt;br /&gt;
using System.Security.Principal;&lt;br /&gt;
using System.Threading;&lt;br /&gt;
public class Starter {&lt;br /&gt;
    public static void Main() {&lt;br /&gt;
        GenericIdentity g = new GenericIdentity(&amp;quot;Person1&amp;quot;);&lt;br /&gt;
        GenericPrincipal p = new GenericPrincipal(g,new string[] { &amp;quot;Manager&amp;quot; });&lt;br /&gt;
        Thread.CurrentPrincipal = p;&lt;br /&gt;
        MyClass.MethodA();&lt;br /&gt;
        YClass.MethodA();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
[PrincipalPermission(SecurityAction.Demand, Role = &amp;quot;Manager&amp;quot;)]&lt;br /&gt;
public class MyClass {&lt;br /&gt;
    static public void MethodA() {&lt;br /&gt;
        Console.WriteLine(&amp;quot;MyClass.MethodA&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
[PrincipalPermission(SecurityAction.Demand,Role = &amp;quot;Accountant&amp;quot;)]&lt;br /&gt;
public class YClass : MyClass {&lt;br /&gt;
    static public void MethodB() {&lt;br /&gt;
        Console.WriteLine(&amp;quot;MyClass.MethodB&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Compiles into a library defining the RamdomSupplier attribute   and the RandomMethod attribute==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Mastering Visual C# .NET&lt;br /&gt;
by Jason Price, Mike Gunderloy&lt;br /&gt;
Publisher: Sybex;&lt;br /&gt;
ISBN: 0782129110&lt;br /&gt;
*/&lt;br /&gt;
/*&lt;br /&gt;
  Example17_5a compiles into a library defining the RamdomSupplier attribute&lt;br /&gt;
  and the RandomMethod attribute&lt;br /&gt;
*/&lt;br /&gt;
using System;&lt;br /&gt;
// declare an attribute named RandomSupplier&lt;br /&gt;
[AttributeUsage(AttributeTargets.Class)]&lt;br /&gt;
public class RandomSupplier : Attribute&lt;br /&gt;
{&lt;br /&gt;
  public RandomSupplier()&lt;br /&gt;
  {&lt;br /&gt;
    // doesn&amp;quot;t have to do anything&lt;br /&gt;
    // we just use this attribute to mark selected classes&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
// declare an attribute named RandomMethod&lt;br /&gt;
[AttributeUsage(AttributeTargets.Method )]&lt;br /&gt;
public class RandomMethod : Attribute&lt;br /&gt;
{&lt;br /&gt;
  public RandomMethod()&lt;br /&gt;
  {&lt;br /&gt;
    // doesn&amp;quot;t have to do anything&lt;br /&gt;
    // we just use this attribute to mark selected methods&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
//===================================================&lt;br /&gt;
/*&lt;br /&gt;
  Example17_5b implements one class to supply random numbers&lt;br /&gt;
*/&lt;br /&gt;
// flag the class as a random supplier&lt;br /&gt;
[RandomSupplier]&lt;br /&gt;
public class OriginalRandom&lt;br /&gt;
{&lt;br /&gt;
  [RandomMethod]&lt;br /&gt;
  public int GetRandom()&lt;br /&gt;
  {&lt;br /&gt;
    return 5;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
//===================================================&lt;br /&gt;
/*&lt;br /&gt;
  Example17_5c implements one class to supply random numbers&lt;br /&gt;
*/&lt;br /&gt;
using System;&lt;br /&gt;
// flag the class as a random supplier&lt;br /&gt;
[RandomSupplier]&lt;br /&gt;
public class NewRandom&lt;br /&gt;
{&lt;br /&gt;
  [RandomMethod]&lt;br /&gt;
  public int ImprovedRandom()&lt;br /&gt;
  {&lt;br /&gt;
    Random r = new Random();&lt;br /&gt;
    return r.Next(1, 100);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
// this class has nothing to do with random numbers&lt;br /&gt;
public class AnotherClass&lt;br /&gt;
{&lt;br /&gt;
  public int NotRandom()&lt;br /&gt;
  {&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
//===================================================&lt;br /&gt;
/*&lt;br /&gt;
  Example17_5d illustrates runtime type discovery&lt;br /&gt;
*/&lt;br /&gt;
using System;&lt;br /&gt;
using System.Reflection;&lt;br /&gt;
class Example17_5d &lt;br /&gt;
{&lt;br /&gt;
  public static void Main(string[] args) &lt;br /&gt;
  {&lt;br /&gt;
    RandomSupplier rs;&lt;br /&gt;
    RandomMethod rm;&lt;br /&gt;
    // iterate over all command-line arguments&lt;br /&gt;
    foreach(string s in args)&lt;br /&gt;
    {&lt;br /&gt;
      Assembly a = Assembly.LoadFrom(s);&lt;br /&gt;
      // Look through all the types in the assembly&lt;br /&gt;
      foreach(Type t in a.GetTypes())&lt;br /&gt;
      {&lt;br /&gt;
        rs = (RandomSupplier) Attribute.GetCustomAttribute(&lt;br /&gt;
         t, typeof(RandomSupplier));&lt;br /&gt;
        if(rs != null)&lt;br /&gt;
        {&lt;br /&gt;
          Console.WriteLine(&amp;quot;Found RandomSupplier class {0} in {1}&amp;quot;,&lt;br /&gt;
           t, s);&lt;br /&gt;
          foreach(MethodInfo m in t.GetMethods())&lt;br /&gt;
          {&lt;br /&gt;
            rm = (RandomMethod) Attribute.GetCustomAttribute(&lt;br /&gt;
             m, typeof(RandomMethod));&lt;br /&gt;
            if(rm != null)&lt;br /&gt;
            {&lt;br /&gt;
              Console.WriteLine(&amp;quot;Found RandomMethod method {0}&amp;quot;&lt;br /&gt;
               , m.Name );&lt;br /&gt;
            }&lt;br /&gt;
          }        &lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Creating and using a class attribute.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
&lt;br /&gt;
using System;&lt;br /&gt;
using System.Reflection;&lt;br /&gt;
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]&lt;br /&gt;
public class Creator : System.Attribute {&lt;br /&gt;
    public Creator(string name, string date) {&lt;br /&gt;
        this.name = name;&lt;br /&gt;
        this.date = date;&lt;br /&gt;
        version = 0.1;&lt;br /&gt;
    }&lt;br /&gt;
    string date;&lt;br /&gt;
    string name;&lt;br /&gt;
    public double version;&lt;br /&gt;
}&lt;br /&gt;
[Creator(&amp;quot;T&amp;quot;, &amp;quot;05/01/2001&amp;quot;, version = 1.1)]&lt;br /&gt;
class MainClass {&lt;br /&gt;
    static public void Main(String[] args) {&lt;br /&gt;
        for (int i = 0; i &amp;lt; args.Length; ++i)&lt;br /&gt;
            System.Console.WriteLine(&amp;quot;Args[{0}] = {1}&amp;quot;, i, args[i]);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Define contant and use it in Conditional attribute==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
#define LOG&lt;br /&gt;
using System;&lt;br /&gt;
using System.IO;&lt;br /&gt;
using System.Diagnostics;&lt;br /&gt;
&lt;br /&gt;
class Starter {&lt;br /&gt;
    static void Main() {&lt;br /&gt;
        LogInfo(new StreamWriter(@&amp;quot;c:\logfile.txt&amp;quot;));&lt;br /&gt;
    }&lt;br /&gt;
    [Conditional(&amp;quot;LOG&amp;quot;)]&lt;br /&gt;
    private static void LogInfo(StreamWriter sr) {&lt;br /&gt;
        // write information to log file&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Defining New Attribute Classes==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
&lt;br /&gt;
using System;&lt;br /&gt;
using System.Diagnostics;&lt;br /&gt;
using System.Reflection;&lt;br /&gt;
   &lt;br /&gt;
[AttributeUsage(AttributeTargets.Class)]&lt;br /&gt;
public class ClassAuthorAttribute : Attribute&lt;br /&gt;
{&lt;br /&gt;
    private string AuthorName;&lt;br /&gt;
   &lt;br /&gt;
    public ClassAuthorAttribute(string AuthorName)&lt;br /&gt;
    {&lt;br /&gt;
        this.AuthorName = AuthorName;&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
    public string Author&lt;br /&gt;
    {&lt;br /&gt;
        get&lt;br /&gt;
        {&lt;br /&gt;
            return AuthorName;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
[ClassAuthor(&amp;quot;AA&amp;quot;)]&lt;br /&gt;
public class TestClass&lt;br /&gt;
{&lt;br /&gt;
    public void Method1()&lt;br /&gt;
    {&lt;br /&gt;
        Console.WriteLine(&amp;quot;Hello from Method1!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
    [Conditional(&amp;quot;DEBUG&amp;quot;)]&lt;br /&gt;
    public void Method2()&lt;br /&gt;
    {&lt;br /&gt;
        Console.WriteLine(&amp;quot;Hello from Method2!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
    public void Method3()&lt;br /&gt;
    {&lt;br /&gt;
        Console.WriteLine(&amp;quot;Hello from Method3!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
public class MainClass&lt;br /&gt;
{&lt;br /&gt;
    public static void Main()&lt;br /&gt;
    {&lt;br /&gt;
        TestClass MyTestClass = new TestClass();&lt;br /&gt;
   &lt;br /&gt;
        MyTestClass.Method1();&lt;br /&gt;
        MyTestClass.Method2();&lt;br /&gt;
        MyTestClass.Method3();&lt;br /&gt;
   &lt;br /&gt;
        object []  ClassAttributes;&lt;br /&gt;
        MemberInfo TypeInformation;&lt;br /&gt;
   &lt;br /&gt;
        TypeInformation = typeof(TestClass);&lt;br /&gt;
        ClassAttributes = TypeInformation.GetCustomAttributes(typeof(ClassAuthorAttribute), false);&lt;br /&gt;
        if(ClassAttributes.GetLength(0) != 0)&lt;br /&gt;
        {&lt;br /&gt;
            ClassAuthorAttribute ClassAttribute;&lt;br /&gt;
   &lt;br /&gt;
            ClassAttribute = (ClassAuthorAttribute)(ClassAttributes[0]);&lt;br /&gt;
            Console.WriteLine(&amp;quot;Class Author: {0}&amp;quot;, ClassAttribute.Author);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==demonstrates the flags attribute of an enumeration==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
using System;&lt;br /&gt;
&lt;br /&gt;
[Flags]&lt;br /&gt;
public enum Contribution {&lt;br /&gt;
    Pension = 0x01,&lt;br /&gt;
    ProfitSharing = 0x02,&lt;br /&gt;
    CreditBureau = 0x04,&lt;br /&gt;
    SavingsPlan = 0x08,&lt;br /&gt;
    All = Pension | ProfitSharing | CreditBureau | SavingsPlan&lt;br /&gt;
}&lt;br /&gt;
public class Employee {&lt;br /&gt;
    private Contribution prop_contributions;&lt;br /&gt;
    public Contribution contributions {&lt;br /&gt;
        get {&lt;br /&gt;
            return prop_contributions;&lt;br /&gt;
        }&lt;br /&gt;
        set {&lt;br /&gt;
            prop_contributions = value;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
public class Starter {&lt;br /&gt;
    public static void Main() {&lt;br /&gt;
        Employee bob = new Employee();&lt;br /&gt;
        bob.contributions = Contribution.ProfitSharing | Contribution.CreditBureau;&lt;br /&gt;
        if ((bob.contributions &amp;amp; Contribution.ProfitSharing)== Contribution.ProfitSharing) {&lt;br /&gt;
            Console.WriteLine(&amp;quot;Bob enrolled in profit sharing&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Demonstrate the Conditional attribute==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
// Demonstrate the Conditional attribute. &lt;br /&gt;
 &lt;br /&gt;
#define TRIAL &lt;br /&gt;
 &lt;br /&gt;
using System; &lt;br /&gt;
using System.Diagnostics; &lt;br /&gt;
 &lt;br /&gt;
public class TestAno { &lt;br /&gt;
 &lt;br /&gt;
  [Conditional(&amp;quot;TRIAL&amp;quot;)]  &lt;br /&gt;
  void trial() { &lt;br /&gt;
    Console.WriteLine(&amp;quot;Trial version, not for distribution.&amp;quot;); &lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
  [Conditional(&amp;quot;RELEASE&amp;quot;)]  &lt;br /&gt;
  void release() { &lt;br /&gt;
    Console.WriteLine(&amp;quot;Final release version.&amp;quot;); &lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
  public static void Main() { &lt;br /&gt;
    TestAno t = new TestAno(); &lt;br /&gt;
 &lt;br /&gt;
    t.trial(); // call only if TRIAL is defined &lt;br /&gt;
    t.release(); // called only if RELEASE is defined &lt;br /&gt;
  } &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Demonstrate the Obsolete attribute==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
// Demonstrate the Obsolete attribute. &lt;br /&gt;
 &lt;br /&gt;
using System; &lt;br /&gt;
 &lt;br /&gt;
public class TestAno1 { &lt;br /&gt;
 &lt;br /&gt;
  [Obsolete(&amp;quot;Use myMeth2, instead.&amp;quot;)]  &lt;br /&gt;
  static int myMeth(int a, int b) { &lt;br /&gt;
    return a / b; &lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
  // Improved version of myMeth. &lt;br /&gt;
  static int myMeth2(int a, int b) { &lt;br /&gt;
    return b == 0 ? 0 : a /b; &lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
  public static void Main() { &lt;br /&gt;
    Console.WriteLine(&amp;quot;4 / 3 is &amp;quot; + TestAno1.myMeth(4, 3)); &lt;br /&gt;
 &lt;br /&gt;
    Console.WriteLine(&amp;quot;4 / 3 is &amp;quot; + TestAno1.myMeth2(4, 3));  &lt;br /&gt;
  } &lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==How to create a custom attribute==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Mastering Visual C# .NET&lt;br /&gt;
by Jason Price, Mike Gunderloy&lt;br /&gt;
Publisher: Sybex;&lt;br /&gt;
ISBN: 0782129110&lt;br /&gt;
*/&lt;br /&gt;
/*&lt;br /&gt;
  Example17_3.cs shows how to create a custom attribute&lt;br /&gt;
*/&lt;br /&gt;
using System;&lt;br /&gt;
&lt;br /&gt;
public class Example17_3 &lt;br /&gt;
{&lt;br /&gt;
    public static void Main() &lt;br /&gt;
    {&lt;br /&gt;
        UnitTest u;&lt;br /&gt;
        // retrieve and display the UnitTest attributes of the classes&lt;br /&gt;
        Console.Write(&amp;quot;Class1 UnitTest attribute: &amp;quot;);&lt;br /&gt;
        u = (UnitTest) Attribute.GetCustomAttribute(&lt;br /&gt;
            typeof(Class1), typeof(UnitTest));&lt;br /&gt;
        Console.WriteLine(u.Written());&lt;br /&gt;
        Console.Write(&amp;quot;Class2 UnitTest attribute: &amp;quot;);&lt;br /&gt;
        u = (UnitTest) Attribute.GetCustomAttribute(&lt;br /&gt;
            typeof(Class2), typeof(UnitTest));&lt;br /&gt;
        Console.WriteLine(u.Written());&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// declare an attribute named UnitTest&lt;br /&gt;
// UnitTest.Written is either true or false&lt;br /&gt;
public class UnitTest : Attribute&lt;br /&gt;
{&lt;br /&gt;
    bool bWritten;&lt;br /&gt;
    public bool Written()&lt;br /&gt;
    {&lt;br /&gt;
        return bWritten;&lt;br /&gt;
    }&lt;br /&gt;
    public UnitTest(bool Written)&lt;br /&gt;
    {&lt;br /&gt;
        bWritten = Written;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
// apply the UnitTest attribute to two classes&lt;br /&gt;
[UnitTest(true)]&lt;br /&gt;
public class Class1&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
[UnitTest(false)]&lt;br /&gt;
public class Class2&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Illustrates the GetCustomAttributes method==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Mastering Visual C# .NET&lt;br /&gt;
by Jason Price, Mike Gunderloy&lt;br /&gt;
Publisher: Sybex;&lt;br /&gt;
ISBN: 0782129110&lt;br /&gt;
*/&lt;br /&gt;
/*&lt;br /&gt;
  Example17_4.cs illustrates the GetCustomAttributes method&lt;br /&gt;
*/&lt;br /&gt;
using System;&lt;br /&gt;
&lt;br /&gt;
public class Example17_4 &lt;br /&gt;
{&lt;br /&gt;
    public static void Main() &lt;br /&gt;
    {&lt;br /&gt;
        // retrieve all attributes of Class1&lt;br /&gt;
        Console.WriteLine(&amp;quot;Class1 attributes: &amp;quot;);&lt;br /&gt;
        object[] aAttributes = Attribute.GetCustomAttributes(&lt;br /&gt;
            typeof(Class1));&lt;br /&gt;
        foreach (object attr in aAttributes)&lt;br /&gt;
        {&lt;br /&gt;
            Console.WriteLine(attr);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// declare an attribute named UnitTest&lt;br /&gt;
// UnitTest.Written is either true or false&lt;br /&gt;
public class UnitTest : Attribute&lt;br /&gt;
{&lt;br /&gt;
    bool bWritten;&lt;br /&gt;
    public bool Written()&lt;br /&gt;
    {&lt;br /&gt;
        return bWritten;&lt;br /&gt;
    }&lt;br /&gt;
    public UnitTest(bool Written)&lt;br /&gt;
    {&lt;br /&gt;
        bWritten = Written;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// declare another attribute named LifeCycle&lt;br /&gt;
// LifeCycle.Stage returns a string&lt;br /&gt;
public class LifeCycle : Attribute&lt;br /&gt;
{&lt;br /&gt;
    string sStage;&lt;br /&gt;
    public string Stage()&lt;br /&gt;
    {&lt;br /&gt;
        return sStage;&lt;br /&gt;
    }&lt;br /&gt;
    public LifeCycle(string Stage)&lt;br /&gt;
    {&lt;br /&gt;
        sStage = Stage;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
// apply the attribues to a class&lt;br /&gt;
[UnitTest(true)]&lt;br /&gt;
[LifeCycle(&amp;quot;Coding&amp;quot;)]&lt;br /&gt;
public class Class1&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Illustrates use of the Conditional attribute==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
illustrates use of the Conditional attribute&lt;br /&gt;
*/&lt;br /&gt;
#define USE_METHOD_1&lt;br /&gt;
using System;&lt;br /&gt;
using System.Diagnostics;&lt;br /&gt;
public class Example17_2 &lt;br /&gt;
{&lt;br /&gt;
    [Conditional(&amp;quot;USE_METHOD_1&amp;quot;)]&lt;br /&gt;
    public static void Method1()&lt;br /&gt;
    {&lt;br /&gt;
        Console.WriteLine(&amp;quot;In Method 1&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    public static void Main() &lt;br /&gt;
    {&lt;br /&gt;
        Console.WriteLine(&amp;quot;In Main&amp;quot;);&lt;br /&gt;
        Method1();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Illustrates use of the Obsolete attribute==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
illustrates use of the Obsolete attribute&lt;br /&gt;
*/&lt;br /&gt;
using System;&lt;br /&gt;
public class Example17_1 &lt;br /&gt;
{&lt;br /&gt;
  // warn the user that Method1 is obsolete&lt;br /&gt;
  [Obsolete(&amp;quot;Method1 has been replaced by NewMethod1&amp;quot;, false)]&lt;br /&gt;
  public static int Method1()&lt;br /&gt;
  {&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
  // throw an error if the user tries to use Method2&lt;br /&gt;
  [Obsolete(&amp;quot;Method2 has been replaced by NewMethod2&amp;quot;, true)]&lt;br /&gt;
  public static int Method2()&lt;br /&gt;
  {&lt;br /&gt;
    return 2;&lt;br /&gt;
  }&lt;br /&gt;
  public static void Main() &lt;br /&gt;
  {&lt;br /&gt;
    Console.WriteLine(Method1());&lt;br /&gt;
    Console.WriteLine(Method2());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Shows the use of assembly attributes==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
shows the use of assembly attributes&lt;br /&gt;
*/&lt;br /&gt;
using System;&lt;br /&gt;
using System.Reflection;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
[assembly:AssemblyVersionAttribute(&amp;quot;1.0.0.0&amp;quot;)]&lt;br /&gt;
[assembly:AssemblyTitleAttribute(&amp;quot;Example 16.1&amp;quot;)]&lt;br /&gt;
public class Example16_1 &lt;br /&gt;
{&lt;br /&gt;
    string privateString;&lt;br /&gt;
    public string inString &lt;br /&gt;
    {&lt;br /&gt;
        get &lt;br /&gt;
        {&lt;br /&gt;
            return privateString;&lt;br /&gt;
        }&lt;br /&gt;
        set&lt;br /&gt;
        {&lt;br /&gt;
            privateString = inString;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public void upper(out string upperString)&lt;br /&gt;
    {&lt;br /&gt;
        upperString = privateString.ToUpper();&lt;br /&gt;
    }&lt;br /&gt;
    public static void Main() &lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Subclass System.Attribute==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
using System;&lt;br /&gt;
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Assembly, AllowMultiple = true, Inherited = false)]&lt;br /&gt;
public class AuthorAttribute : System.Attribute&lt;br /&gt;
{&lt;br /&gt;
    private string company; &lt;br /&gt;
    private string name;&lt;br /&gt;
    public AuthorAttribute(string name)&lt;br /&gt;
    {&lt;br /&gt;
        this.name = name;&lt;br /&gt;
        company = &amp;quot;&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    public string Company&lt;br /&gt;
    {&lt;br /&gt;
        get { return company; }&lt;br /&gt;
        set { company = value; }&lt;br /&gt;
    }&lt;br /&gt;
    public string Name&lt;br /&gt;
    {&lt;br /&gt;
        get { return name; }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
[assembly: Author(&amp;quot;Tom&amp;quot;, Company = &amp;quot;Ltd.&amp;quot;)]&lt;br /&gt;
[Author(&amp;quot;Tom&amp;quot;, Company = &amp;quot;Abc Ltd.&amp;quot;)]&lt;br /&gt;
class SomeClass { }&lt;br /&gt;
[Author(&amp;quot;Lena&amp;quot;)]&lt;br /&gt;
public class SomeOtherClass&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
[Author(&amp;quot;FirstName&amp;quot;)]&lt;br /&gt;
[Author(&amp;quot;Jack&amp;quot;, Company = &amp;quot;Ltd.&amp;quot;)]&lt;br /&gt;
class MainClass&lt;br /&gt;
{&lt;br /&gt;
    public static void Main()&lt;br /&gt;
    {&lt;br /&gt;
        Type type = typeof(MainClass);&lt;br /&gt;
        object[] attrs = type.GetCustomAttributes(typeof(AuthorAttribute), true);&lt;br /&gt;
        foreach (AuthorAttribute a in attrs)&lt;br /&gt;
        {&lt;br /&gt;
            Console.WriteLine(a.Name + &amp;quot;, &amp;quot; + a.rupany);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Use a named attribute parameter==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
// Use a named attribute parameter. &lt;br /&gt;
  &lt;br /&gt;
using System;  &lt;br /&gt;
using System.Reflection; &lt;br /&gt;
  &lt;br /&gt;
[AttributeUsage(AttributeTargets.All)] &lt;br /&gt;
class RemarkAttribute : Attribute { &lt;br /&gt;
  string remarkValue; // underlies remark property &lt;br /&gt;
 &lt;br /&gt;
  public string supplement; // this is a named parameter &lt;br /&gt;
 &lt;br /&gt;
  public RemarkAttribute(string comment) { &lt;br /&gt;
    remarkValue = comment; &lt;br /&gt;
    supplement = &amp;quot;None&amp;quot;; &lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
  public string remark { &lt;br /&gt;
    get { &lt;br /&gt;
      return remarkValue; &lt;br /&gt;
    } &lt;br /&gt;
  } &lt;br /&gt;
}  &lt;br /&gt;
 &lt;br /&gt;
[RemarkAttribute(&amp;quot;This class uses an attribute.&amp;quot;, &lt;br /&gt;
                 supplement = &amp;quot;This is additional info.&amp;quot;)] &lt;br /&gt;
class UseAttrib { &lt;br /&gt;
  // ... &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public class NamedParamDemo {  &lt;br /&gt;
  public static void Main() {  &lt;br /&gt;
    Type t = typeof(UseAttrib); &lt;br /&gt;
 &lt;br /&gt;
    Console.Write(&amp;quot;Attributes in &amp;quot; + t.Name + &amp;quot;: &amp;quot;); &lt;br /&gt;
 &lt;br /&gt;
    object[] attribs = t.GetCustomAttributes(false);  &lt;br /&gt;
    foreach(object o in attribs) { &lt;br /&gt;
      Console.WriteLine(o); &lt;br /&gt;
    } &lt;br /&gt;
 &lt;br /&gt;
    // Retrieve the RemarkAttribute. &lt;br /&gt;
    Type tRemAtt = typeof(RemarkAttribute); &lt;br /&gt;
    RemarkAttribute ra = (RemarkAttribute) &lt;br /&gt;
          Attribute.GetCustomAttribute(t, tRemAtt); &lt;br /&gt;
 &lt;br /&gt;
    Console.Write(&amp;quot;Remark: &amp;quot;); &lt;br /&gt;
    Console.WriteLine(ra.remark); &lt;br /&gt;
 &lt;br /&gt;
    Console.Write(&amp;quot;Supplement: &amp;quot;); &lt;br /&gt;
    Console.WriteLine(ra.supplement); &lt;br /&gt;
  }  &lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Use a property as a named attribute parameter==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
C#: The Complete Reference &lt;br /&gt;
by Herbert Schildt &lt;br /&gt;
Publisher: Osborne/McGraw-Hill (March 8, 2002)&lt;br /&gt;
ISBN: 0072134852&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// Use a property as a named attribute parameter. &lt;br /&gt;
  &lt;br /&gt;
using System;  &lt;br /&gt;
using System.Reflection; &lt;br /&gt;
  &lt;br /&gt;
[AttributeUsage(AttributeTargets.All)] &lt;br /&gt;
class RemarkAttribute : Attribute { &lt;br /&gt;
  string remarkValue; // underlies remark property &lt;br /&gt;
 &lt;br /&gt;
  int pri_priority; // underlies priority property &lt;br /&gt;
 &lt;br /&gt;
  public string supplement; // this is a named parameter &lt;br /&gt;
 &lt;br /&gt;
  public RemarkAttribute(string comment) { &lt;br /&gt;
    remarkValue = comment; &lt;br /&gt;
    supplement = &amp;quot;None&amp;quot;; &lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
  public string remark { &lt;br /&gt;
    get { &lt;br /&gt;
      return remarkValue; &lt;br /&gt;
    } &lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
  // Use a property as a named parameter. &lt;br /&gt;
  public int priority { &lt;br /&gt;
    get { &lt;br /&gt;
      return pri_priority; &lt;br /&gt;
    } &lt;br /&gt;
    set { &lt;br /&gt;
      pri_priority = value; &lt;br /&gt;
    } &lt;br /&gt;
  } &lt;br /&gt;
}  &lt;br /&gt;
 &lt;br /&gt;
[RemarkAttribute(&amp;quot;This class uses an attribute.&amp;quot;, &lt;br /&gt;
                 supplement = &amp;quot;This is additional info.&amp;quot;, &lt;br /&gt;
                 priority = 10)] &lt;br /&gt;
class UseAttrib { &lt;br /&gt;
  // ... &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public class NamedParamDemo11 {  &lt;br /&gt;
  public static void Main() {  &lt;br /&gt;
    Type t = typeof(UseAttrib); &lt;br /&gt;
 &lt;br /&gt;
    Console.Write(&amp;quot;Attributes in &amp;quot; + t.Name + &amp;quot;: &amp;quot;); &lt;br /&gt;
 &lt;br /&gt;
    object[] attribs = t.GetCustomAttributes(false);  &lt;br /&gt;
    foreach(object o in attribs) { &lt;br /&gt;
      Console.WriteLine(o); &lt;br /&gt;
    } &lt;br /&gt;
 &lt;br /&gt;
    // Retrieve the RemarkAttribute. &lt;br /&gt;
    Type tRemAtt = typeof(RemarkAttribute); &lt;br /&gt;
    RemarkAttribute ra = (RemarkAttribute) &lt;br /&gt;
          Attribute.GetCustomAttribute(t, tRemAtt); &lt;br /&gt;
 &lt;br /&gt;
    Console.Write(&amp;quot;Remark: &amp;quot;); &lt;br /&gt;
    Console.WriteLine(ra.remark); &lt;br /&gt;
 &lt;br /&gt;
    Console.Write(&amp;quot;Supplement: &amp;quot;); &lt;br /&gt;
    Console.WriteLine(ra.supplement); &lt;br /&gt;
 &lt;br /&gt;
    Console.WriteLine(&amp;quot;Priority: &amp;quot; + ra.priority); &lt;br /&gt;
  }  &lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Use AttributeUsage==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
using System;&lt;br /&gt;
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct,Inherited = false)]&lt;br /&gt;
public class ClassVersionAttribute : System.Attribute {&lt;br /&gt;
    public ClassVersionAttribute(string target) : this(target, target) {&lt;br /&gt;
    }&lt;br /&gt;
    public ClassVersionAttribute(string target,string current) {&lt;br /&gt;
        m_TargetVersion = target;&lt;br /&gt;
        m_CurrentVersion = current;&lt;br /&gt;
    }&lt;br /&gt;
    private bool m_UseCurrentVersion = false;&lt;br /&gt;
    public bool UseCurrentVersion {&lt;br /&gt;
        set {&lt;br /&gt;
            if (m_TargetVersion != m_CurrentVersion) {&lt;br /&gt;
                m_UseCurrentVersion = value;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        get {&lt;br /&gt;
            return m_UseCurrentVersion;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    private string m_CurrentName;&lt;br /&gt;
    public string CurrentName {&lt;br /&gt;
        set {&lt;br /&gt;
            m_CurrentName = value;&lt;br /&gt;
        }&lt;br /&gt;
        get {&lt;br /&gt;
            return m_CurrentName;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    private string m_TargetVersion;&lt;br /&gt;
    public string TargetVersion {&lt;br /&gt;
        get {&lt;br /&gt;
            return m_TargetVersion;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    private string m_CurrentVersion;&lt;br /&gt;
    public string CurrentVersion {&lt;br /&gt;
        get {&lt;br /&gt;
            return m_CurrentVersion;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>