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

Init-only setters in C Sharp (C#) - Cheat Sheet & Quick Revision

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is an init-only setter in C#?
An init-only setter allows a property to be set only during object initialization, making the property immutable after the object is created.
Click to reveal answer
beginner
How do you declare an init-only property in C#?
Use the init keyword instead of set in the property declaration, like:
public string Name { get; init; }
Click to reveal answer
beginner
When can you assign a value to an init-only property?
You can assign a value only during object creation or in the object initializer block, but not after the object is fully constructed.
Click to reveal answer
intermediate
What happens if you try to set an init-only property after object initialization?
The compiler will give an error because init-only properties cannot be changed after the object is created.
Click to reveal answer
intermediate
Why are init-only setters useful?
They help create immutable objects with simpler syntax, improving safety by preventing accidental changes after creation.
Click to reveal answer
Which keyword is used to declare an init-only setter in C#?
Areadonly
Bset
Cinit
Dconst
When can you assign a value to a property with an init-only setter?
AAnytime after object creation
BOnly in constructors
COnly inside methods
DOnly during object initialization
What will happen if you try to set an init-only property after the object is created?
ACompiler error
BValue changes successfully
CRuntime exception
DProperty is ignored
Which of these is a benefit of using init-only setters?
ACreating immutable objects easily
BAllowing properties to change anytime
CMaking properties private
DImproving runtime performance
How do init-only setters improve code safety?
ABy making properties static
BBy preventing accidental property changes after creation
CBy hiding properties from other classes
DBy allowing properties to be changed anywhere
Explain what init-only setters are and how they differ from regular setters in C#.
Think about when you can assign values to properties.
You got /4 concepts.
    Describe a real-life scenario where using init-only setters would be beneficial.
    Consider objects that should not change after being set up.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of init-only setters in C#?
      easy
      A. To prevent object creation
      B. To allow setting properties only during object creation
      C. To make methods run faster
      D. To allow properties to be changed anytime

      Solution

      1. Step 1: Understand init-only setters

        Init-only setters allow properties to be set only when the object is created, not after.
      2. Step 2: Compare options

        Only To allow setting properties only during object creation correctly describes this behavior; others are unrelated or incorrect.
      3. Final Answer:

        To allow setting properties only during object creation -> Option B
      4. Quick Check:

        Init-only setters = set only at creation [OK]
      Hint: Init-only means set once during creation only [OK]
      Common Mistakes:
      • Thinking init-only allows changes anytime
      • Confusing init-only with readonly fields
      • Assuming init-only affects methods
      2. Which of the following is the correct syntax to declare an init-only property in C#?
      easy
      A. public string Name { get; init; }
      B. public string Name { get; set; }
      C. public string Name { get; readonly; }
      D. public string Name { get; private set; }

      Solution

      1. Step 1: Recall init-only syntax

        Init-only properties use init instead of set to allow setting only during initialization.
      2. Step 2: Check options

        public string Name { get; init; } uses { get; init; }, which is correct syntax. Others use set, readonly (invalid here), or private set.
      3. Final Answer:

        public string Name { get; init; } -> Option A
      4. Quick Check:

        Init-only syntax = get + init [OK]
      Hint: Init-only uses 'init' keyword, not 'set' [OK]
      Common Mistakes:
      • Using 'set' instead of 'init'
      • Trying to use 'readonly' in property accessor
      • Confusing 'private set' with init-only
      3. What will happen when you run this code?
      public class Person {
          public string Name { get; init; }
      }
      
      var p = new Person { Name = "Alice" };
      p.Name = "Bob";
      Console.WriteLine(p.Name);
      medium
      A. Prints 'Alice'
      B. Runtime exception
      C. Prints 'Bob'
      D. Compile-time error

      Solution

      1. Step 1: Understand init-only property behavior

        The property Name can only be set during object initialization (inside the braces). Setting it later causes a compile error.
      2. Step 2: Analyze the code

        After creating p with Name = "Alice", the code tries to assign p.Name = "Bob" outside initialization, which is invalid.
      3. Final Answer:

        Compile-time error -> Option D
      4. Quick Check:

        Changing init-only after creation = compile error [OK]
      Hint: Init-only properties can't be changed after creation [OK]
      Common Mistakes:
      • Assuming property can be changed anytime
      • Expecting runtime error instead of compile error
      • Confusing init-only with readonly fields
      4. Identify the error in this code snippet:
      public class Car {
          public string Model { get; init; }
      }
      
      var car = new Car();
      car.Model = "Sedan";
      
      medium
      A. Missing constructor call
      B. Property Model must have a setter, not init
      C. Cannot assign init-only property outside object initializer
      D. No error, code is correct

      Solution

      1. Step 1: Check how init-only properties are set

        Init-only properties must be set during object creation using an initializer, not after.
      2. Step 2: Analyze the code

        The code creates car with default constructor, then tries to set Model property outside initialization, which is invalid.
      3. Final Answer:

        Cannot assign init-only property outside object initializer -> Option C
      4. Quick Check:

        Init-only set only in initializer, not later [OK]
      Hint: Set init-only properties inside braces only [OK]
      Common Mistakes:
      • Trying to set init-only property after creation
      • Thinking init-only means readonly
      • Ignoring object initializer syntax
      5. Given this record declaration:
      public record Book {
          public string Title { get; init; }
          public string Author { get; init; }
      }
      
      var book1 = new Book { Title = "C# Guide", Author = "Jane" };
      var book2 = book1 with { Author = "John" };
      
      Console.WriteLine(book2.Title + ", " + book2.Author);

      What is the output?
      hard
      A. C# Guide, John
      B. C# Guide, Jane
      C. Compile-time error due to init-only setter
      D. Runtime exception

      Solution

      1. Step 1: Understand 'with' expression on records

        The 'with' expression creates a copy of book1 but allows changing init-only properties during creation of the new object.
      2. Step 2: Analyze the output

        book2 copies Title as "C# Guide" and sets Author to "John". Printing shows "C# Guide, John".
      3. Final Answer:

        C# Guide, John -> Option A
      4. Quick Check:

        'with' allows changing init-only during copy [OK]
      Hint: 'with' can set init-only properties on new record copies [OK]
      Common Mistakes:
      • Thinking 'with' cannot change init-only properties
      • Expecting compile error on 'with' usage
      • Confusing init-only with immutable fields