8.14 Attributes

王朝other·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

8.14 Attributes

C# is an imperative language, but like all imperative languages it does have

some declarative elements. For

example, the accessibility of a method in a class is specified by declaring

it public, protected,

internal, protected internal, or private. C# generalizes this capability,

so that programmers can

invent new kinds of declarative information, attach this declarative

information to various program entities,

and retrieve this declarative information at run-time. Programs specify

this additional declarative

information by defining and using attributes (§24).

For instance, a framework might define a HelpAttribute attribute that can

be placed on program elements

such as classes and methods, enabling developers to provide a mapping from

program elements to

documentation for them. The example

using System;

[AttributeUsage(AttributeTargets.All)]

public class HelpAttribute: Attribute

{

public HelpAttribute(string url) {

this.url = url;

}

public string Topic = null;

private string url;

Chapter 8 Language Overview

49

public string Url {

get { return url; }

}

}

defines an attribute class named HelpAttribute, or Help for short, that has

one positional parameter

(string url) and one named parameter (string Topic). Positional parameters

are defined by the

formal parameters for public instance constructors of the attribute class,

and named parameters are defined

by public non-static read-write fields and properties of the attribute

class.

The example

[Help("http://www.mycompany.com/./Class1.htm )]

public class Class1

{

[Help("http://www.mycompany.com/./Class1.htm , Topic = "F")]

public void F() {}

}

shows several uses of the attribute Help.

Attribute information for a given program element can be retrieved at

run-time by using reflection support.

The example

using System;

class Test

{

static void Main() {

Type type = typeof(Class1);

object[] arr = type.GetCustomAttributes(typeof(HelpAttribute),

true);

if (arr.Length == 0)

Console.WriteLine("Class1 has no Help attribute.");

else {

HelpAttribute ha = (HelpAttribute) arr[0];

Console.WriteLine("Url = {0}, Topic = {1}", ha.Url, ha.Topic);

}

}

}

checks to see if Class1 has a Help attribute, and writes out the associated

Topic and Url values if the

attribute is present.

End of informative text.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航