Csharp/CSharp Tutorial/Attribute/Attribute
Версия от 15:31, 26 мая 2010; (обсуждение)
Содержание
Assembly-Level Attributes
Attribute Meaning in Life
AssemblyCompanyAttribute basic company information
AssemblyCopyrightAttribute any copyright information
AssemblyCultureAttribute information on cultures or languages
AssemblyDescriptionAttribute a description of the product
AssemblyKeyFileAttribute the name of the file containing the key pair
AssemblyOperatingSystemAttribute operating system
AssemblyProcessorAttribute processors to support
AssemblyProductAttribute Provides product information
AssemblyTrademarkAttribute Provides trademark information
AssemblyVersionAttribute assembly"s version information, in the format <major.minor.build.revision>Custom Attributes
using System;
using System.Collections.Generic;
using System.Text;
[AttributeUsage(AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = true)]
public class BugFixAttribute : System.Attribute
{
public int BugID;
public string Date;
public string Programmer;
public string Comment;
public BugFixAttribute(int bugID,string programmer,string date){
this.BugID = bugID;
this.Programmer = programmer;
this.Date = date;
}
}
[BugFixAttribute(1, "B", "01/04/05",Comment = "value")]
public class MyMath
{
public double DoFunc1(double param1)
{
return param1 + DoFunc2(param1);
}
public double DoFunc2(double param1)
{
return param1 / 3;
}
}Providing an Attribute Constructor
using System;
public class CommandLineSwitchAliasAttribute : Attribute
{
public CommandLineSwitchAliasAttribute(string alias)
{
Alias = alias;
}
public string Alias
{
get { return _Alias; }
set { _Alias = value; }
}
private string _Alias;
}
class CommandLineInfo
{
[CommandLineSwitchAliasAttribute("?")]
public bool Help
{
get { return _Help; }
set { _Help = value; }
}
private bool _Help;
}Retrieving a Specific Attribute and Checking Its Initialization
using System;
using System.Reflection;
public class CommandLineSwitchAliasAttribute : Attribute
{
public CommandLineSwitchAliasAttribute(string alias)
{
Alias = alias;
}
public string Alias
{
get { return _Alias; }
set { _Alias = value; }
}
private string _Alias;
}
class CommandLineInfo
{
[CommandLineSwitchAliasAttribute("?")]
public bool Help
{
get { return _Help; }
set { _Help = value; }
}
private bool _Help;
}
class MainClass
{
static void Main()
{
PropertyInfo property = typeof(CommandLineInfo).GetProperty("Help");
CommandLineSwitchAliasAttribute attribute = (CommandLineSwitchAliasAttribute)property.GetCustomAttributes(typeof(CommandLineSwitchAliasAttribute), false)[0];
if (attribute.Alias == "?")
{
Console.WriteLine("Help(?)");
};
}
}Saving a Document Using System.SerializableAttribute
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
class Program
{
public static void Main()
{
Stream stream;
Document documentBefore = new Document();
documentBefore.Title ="test";
Document documentAfter;
using (stream = File.Open(documentBefore.Title + ".bin", FileMode.Create))
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, documentBefore);
}
using (stream = File.Open(documentBefore.Title + ".bin", FileMode.Open))
{
BinaryFormatter formatter = new BinaryFormatter();
documentAfter = (Document)formatter.Deserialize(stream);
}
Console.WriteLine(documentAfter.Title);
}
}
[Serializable]
class Document
{
public string Title = null;
public string Data = null;
[NonSerialized]
public long _WindowHandle = 0;
class Image
{
}
[NonSerialized]
private Image Picture = new Image();
}Use Attributes to mark a method
You can add declarative information to a program by using an attribute.
An attribute defines additional information that is associated with a class, structure, method, and so on.
- An attribute is supported by a class that inherits System.Attribute.
- All attribute classes must be subclasses of System.Attribute.
- This built-in attribute AttributeUsage specifies the types of items to which the attribute can be applied.
using System.Diagnostics;
class MainClass
{
[Conditional("DEBUG")]
public void Validate()
{
}
}C# defines three built-in attributes:
- AttributeUsage,
- Conditional,
- Obsolete.