Bird
Raised Fist0
C Sharp (C#)programming~10 mins

Custom attribute classes in C Sharp (C#) - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to declare a custom attribute class named MyAttribute.

C Sharp (C#)
public class [1] : System.Attribute {}
Drag options to blanks, or click blank then click option'
AMyAttribute
BCustomAttr
CAttributeClass
DMyClass
Attempts:
3 left
💡 Hint
Common Mistakes
Naming the class without 'Attribute' suffix.
Not inheriting from System.Attribute.
2fill in blank
medium

Complete the code to apply the custom attribute MyAttribute to the class Sample.

C Sharp (C#)
[[1]]
public class Sample {}
Drag options to blanks, or click blank then click option'
AMyClass
BAttribute
CCustomAttribute
DMyAttribute
Attempts:
3 left
💡 Hint
Common Mistakes
Using a wrong attribute name.
Missing the square brackets.
3fill in blank
hard

Fix the error in the attribute constructor to accept a string parameter named description.

C Sharp (C#)
public class MyAttribute : System.Attribute {
    public string Description { get; }
    public MyAttribute([1]) {
        Description = description;
    }
}
Drag options to blanks, or click blank then click option'
Adouble description
Bint description
Cstring description
Dbool description
Attempts:
3 left
💡 Hint
Common Mistakes
Using a wrong parameter type.
Mismatching parameter name and property.
4fill in blank
hard

Fill both blanks to create a dictionary using ToDictionary that maps property names to their types for properties with type string.

C Sharp (C#)
var stringProps = typeof(MyAttribute).GetProperties()
    .Where(prop => prop.PropertyType == typeof(string))
    .ToDictionary(prop => [1], prop => [2]);
Drag options to blanks, or click blank then click option'
Aprop.Name
Bprop.PropertyType
Cprop.GetValue(this)
Dprop.ToString()
Attempts:
3 left
💡 Hint
Common Mistakes
Using property values instead of names or types.
Using incorrect property methods.
5fill in blank
hard

Fill all three blanks to create a method that returns the description from the MyAttribute applied to a class.

C Sharp (C#)
public static string GetDescription(Type t) {
    var attr = (MyAttribute)Attribute.GetCustomAttribute(t, typeof([1]));
    return attr == null ? [2] : attr.[3];
}
Drag options to blanks, or click blank then click option'
AMyAttribute
Bstring.Empty
CDescription
DAttribute
Attempts:
3 left
💡 Hint
Common Mistakes
Using wrong attribute type in GetCustomAttribute.
Returning null instead of empty string.
Accessing wrong property name.

Practice

(1/5)
1. What is the main purpose of creating a custom attribute class in C#?
easy
A. To create a new data type for variables
B. To replace the main class in a program
C. To add extra information to code elements like classes or methods
D. To handle exceptions automatically

Solution

  1. Step 1: Understand what attributes do

    Attributes add metadata, or extra info, to code elements like classes or methods.
  2. Step 2: Identify the role of custom attributes

    Custom attributes let you define your own extra info to attach to code elements.
  3. Final Answer:

    To add extra information to code elements like classes or methods -> Option C
  4. Quick Check:

    Custom attributes = extra info [OK]
Hint: Attributes add info to code elements, not change logic [OK]
Common Mistakes:
  • Thinking attributes replace classes
  • Confusing attributes with data types
  • Assuming attributes handle errors
2. Which of the following is the correct way to declare a custom attribute class named InfoAttribute?
easy
A. public struct InfoAttribute : Attribute {}
B. public attribute InfoAttribute {}
C. public class InfoAttribute extends Attribute {}
D. public class InfoAttribute : System.Attribute {}

Solution

  1. Step 1: Recall C# syntax for custom attributes

    Custom attribute classes must inherit from System.Attribute using a class declaration.
  2. Step 2: Check each option

    public class InfoAttribute : System.Attribute {} correctly uses 'public class InfoAttribute : System.Attribute {}'. public attribute InfoAttribute {} uses invalid keyword 'attribute'. public class InfoAttribute extends Attribute {} uses 'extends' which is Java syntax. public struct InfoAttribute : Attribute {} uses 'struct' which is not correct for attributes.
  3. Final Answer:

    public class InfoAttribute : System.Attribute {} -> Option D
  4. Quick Check:

    Custom attribute = class + : System.Attribute [OK]
Hint: Custom attributes are classes inheriting System.Attribute [OK]
Common Mistakes:
  • Using 'attribute' keyword instead of 'class'
  • Using Java syntax 'extends' instead of ':'
  • Declaring attribute as struct
3. What will be the output of the following code?
using System;
[Info("Version 1.0")]
class Program {}

public class InfoAttribute : Attribute
{
    public string Version { get; }
    public InfoAttribute(string version) => Version = version;
}

class Test
{
    static void Main()
    {
        var attrs = typeof(Program).GetCustomAttributes(typeof(InfoAttribute), false);
        if (attrs.Length > 0)
            Console.WriteLine(((InfoAttribute)attrs[0]).Version);
        else
            Console.WriteLine("No attribute");
    }
}
medium
A. Version 1.0
B. No attribute
C. Compilation error
D. Runtime exception

Solution

  1. Step 1: Understand attribute application

    The Program class has the Info attribute with version "Version 1.0" applied.
  2. Step 2: Check reflection code

    The code uses reflection to get InfoAttribute from Program. Since it exists, it prints the Version property.
  3. Final Answer:

    Version 1.0 -> Option A
  4. Quick Check:

    Reflection finds attribute version = Version 1.0 [OK]
Hint: Reflection reads attribute properties if applied [OK]
Common Mistakes:
  • Assuming attribute is not found
  • Confusing attribute class with target class
  • Forgetting to cast attribute before accessing property
4. Identify the error in this custom attribute declaration:
public class MyAttribute
{
    public string Name { get; set; }
    public MyAttribute(string name) { Name = name; }
}
medium
A. Missing inheritance from System.Attribute
B. Property Name should be private
C. Constructor should not have parameters
D. Class should be declared as struct

Solution

  1. Step 1: Check inheritance requirement

    Custom attribute classes must inherit from System.Attribute to be recognized as attributes.
  2. Step 2: Analyze given code

    The class MyAttribute does not inherit from System.Attribute, so it is not a valid attribute class.
  3. Final Answer:

    Missing inheritance from System.Attribute -> Option A
  4. Quick Check:

    Attributes must inherit System.Attribute [OK]
Hint: Always inherit System.Attribute for custom attributes [OK]
Common Mistakes:
  • Forgetting to inherit System.Attribute
  • Thinking constructor must be parameterless
  • Using struct instead of class
5. You want to create a custom attribute PriorityAttribute that accepts an integer priority level and can be applied only to methods. Which of the following is the correct way to declare it?
hard
A. [AttributeUsage(AttributeTargets.Class)] public class PriorityAttribute : Attribute { public int Level; public PriorityAttribute(int level) { Level = level; } }
B. [AttributeUsage(AttributeTargets.Method)] public class PriorityAttribute : Attribute { public int Level { get; } public PriorityAttribute(int level) => Level = level; }
C. public class PriorityAttribute : Attribute { public int Level { get; set; } public PriorityAttribute() {} }
D. [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)] public struct PriorityAttribute { public int Level; public PriorityAttribute(int level) { Level = level; } }

Solution

  1. Step 1: Check AttributeUsage target

    The attribute should apply only to methods, so AttributeTargets.Method is correct.
  2. Step 2: Verify class declaration and constructor

    It must be a class inheriting Attribute, with a constructor accepting an int and a read-only property.
  3. Step 3: Review options

    [AttributeUsage(AttributeTargets.Method)] public class PriorityAttribute : Attribute { public int Level { get; } public PriorityAttribute(int level) => Level = level; } matches all requirements. [AttributeUsage(AttributeTargets.Class)] public class PriorityAttribute : Attribute { public int Level; public PriorityAttribute(int level) { Level = level; } } targets classes, not methods. public class PriorityAttribute : Attribute { public int Level { get; set; } public PriorityAttribute() {} } lacks constructor parameter and target restriction. [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)] public struct PriorityAttribute { public int Level; public PriorityAttribute(int level) { Level = level; } } uses struct, which is invalid for attributes.
  4. Final Answer:

    [AttributeUsage(AttributeTargets.Method)] public class PriorityAttribute : Attribute { public int Level { get; } public PriorityAttribute(int level) => Level = level; } -> Option B
  5. Quick Check:

    AttributeUsage + class + constructor with param = [AttributeUsage(AttributeTargets.Method)] public class PriorityAttribute : Attribute { public int Level { get; } public PriorityAttribute(int level) => Level = level; } [OK]
Hint: Use AttributeUsage to limit targets and inherit Attribute [OK]
Common Mistakes:
  • Using struct instead of class
  • Wrong AttributeTargets in AttributeUsage
  • Missing constructor parameter for priority
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard