Custom attribute targets in C#: how do you specify what elements an attribute can be applied to?
-
ABy applying AttributeUsage to the custom attribute class definition
-
BBy applying UsageAttribute to the custom attribute class definition
-
COnce an attribute is declared, it automatically applies to all targets
-
DBy applying AttributeUsageAttribute to the custom attribute class definition
-
ENone of the above
Answer
Correct Answer: By applying AttributeUsage to the custom attribute class definition
Explanation
Introduction / Context:When you create a custom attribute in C#, you typically want to control where it can be used (e.g., on classes, methods, properties). This is done with AttributeUsage.
Given Data / Assumptions:
- The attribute class derives from System.Attribute.
- We need to set allowed targets and other options (AllowMultiple, Inherited).
Concept / Approach:Apply [AttributeUsage(...)] or its full name [AttributeUsageAttribute(...)] to the attribute class definition. Both forms are equivalent because of the C# attribute naming convention that allows omitting the trailing “Attribute”.
Step-by-Step Solution:
Use [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)] above the attribute class.This precisely controls valid targets and behavior.UsageAttribute does not exist; the automatic “applies to all targets” behavior is false.Verification / Alternative check:Attempt to apply the attribute to a disallowed target; the compiler will emit an error referencing AttributeUsage settings.
Why Other Options Are Wrong:“UsageAttribute” is not a framework attribute. Attributes do not default to “all targets.”
Common Pitfalls:Forgetting that AttributeUsage controls inheritance and multiplicity; omitting it leads to default values (AttributeTargets.All, AllowMultiple = false, Inherited = true for some cases), which might not match your intent.
Final Answer:By applying AttributeUsage to the custom attribute class definition