Attribute: Difference between revisions
From MXMS Wiki
Jump to navigationJump to search
Created page with "An attribute is a declarative tag used to add metadata, or extra information, to program elements such as assemblies, classes, methods, and properties. This metadata can be read at compile time or retrieved at run time using a technique called reflection to dynamically alter program behavior or provide additional context." |
No edit summary |
||
| (3 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
Attributes are metadata attached to a field or a block of code like assemblies, members and types, and are equivalent to annotations in Java. Attributes are accessible to both the compiler and programmatically through reflection. In contrast, properties, in C# terminology, are members of a class which syntactically are used like instance (or class) variables, but are implemented as a pair of getter/setter functions. (In the absence of a setter, properties are read-only.) | |||
The example shows how attributes are defined in C#: | |||
<pre> | |||
[Obsolete("Use class C1 instead", IsError = true)] // causes compiler message saying | |||
public class C // that C is obsolete | |||
{...} | |||
// class name ends with "Attribute" | |||
// but can be used as "Obsolete" | |||
public class ObsoleteAttribute : Attribute | |||
{ | |||
public string Message { get; } | |||
public bool IsError { get; set; } | |||
public ObsoleteAttribute() {...} | |||
public ObsoleteAttribute(string msg) {...} | |||
public ObsoleteAttribute(string msg, bool error) {...} | |||
} | |||
[Obsolete] | |||
[Obsolete("This is obsolete")] | |||
[Obsolete("This is obsolete", false)] | |||
[Obsolete("This is obsolete", IsError = false)] | |||
</pre> | |||
Latest revision as of 16:22, 16 March 2026
Attributes are metadata attached to a field or a block of code like assemblies, members and types, and are equivalent to annotations in Java. Attributes are accessible to both the compiler and programmatically through reflection. In contrast, properties, in C# terminology, are members of a class which syntactically are used like instance (or class) variables, but are implemented as a pair of getter/setter functions. (In the absence of a setter, properties are read-only.)
The example shows how attributes are defined in C#:
[Obsolete("Use class C1 instead", IsError = true)] // causes compiler message saying
public class C // that C is obsolete
{...}
// class name ends with "Attribute"
// but can be used as "Obsolete"
public class ObsoleteAttribute : Attribute
{
public string Message { get; }
public bool IsError { get; set; }
public ObsoleteAttribute() {...}
public ObsoleteAttribute(string msg) {...}
public ObsoleteAttribute(string msg, bool error) {...}
}
[Obsolete]
[Obsolete("This is obsolete")]
[Obsolete("This is obsolete", false)]
[Obsolete("This is obsolete", IsError = false)]