Attributes in C# provide a powerful way to add metadata to your program elements, such as classes, methods, properties, and more. This additional information can be accessed at runtime through reflection.
Here is a simple example of creating and using a custom attribute:
// Define a custom attribute
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class MyCustomAttribute : Attribute
{
public string Description { get; }
public MyCustomAttribute(string description)
{
Description = description;
}
}
// Use the custom attribute
[MyCustomAttribute("This is a sample class with a custom attribute.")]
public class SampleClass
{
[MyCustomAttribute("This is a sample method.")]
public void SampleMethod()
{
// Method implementation
}
}
// Accessing the attribute data at runtime
var type = typeof(SampleClass);
var attributes = type.GetCustomAttributes(typeof(MyCustomAttribute), false);
foreach (MyCustomAttribute attribute in attributes)
{
Console.WriteLine(attribute.Description);
}
How do I avoid rehashing overhead with std::set in multithreaded code?
How do I find elements with custom comparators with std::set for embedded targets?
How do I erase elements while iterating with std::set for embedded targets?
How do I provide stable iteration order with std::unordered_map for large datasets?
How do I reserve capacity ahead of time with std::unordered_map for large datasets?
How do I erase elements while iterating with std::unordered_map in multithreaded code?
How do I provide stable iteration order with std::map for embedded targets?
How do I provide stable iteration order with std::map in multithreaded code?
How do I avoid rehashing overhead with std::map in performance-sensitive code?
How do I merge two containers efficiently with std::map for embedded targets?