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

Properties vs fields in C Sharp (C#)

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
Introduction

Properties and fields both store data in a class, but properties let you control how data is accessed or changed, while fields are simple storage.

When you want to keep data private but allow controlled access.
When you need to run extra code when data changes (like validation).
When you want to expose simple data without extra logic.
When you want to keep your class data safe from unwanted changes.
When you want to make your code easier to maintain and understand.
Syntax
C Sharp (C#)
class MyClass {
    // Field
    public int myField;

    // Property
    private int _myProperty;
    public int MyProperty {
        get { return _myProperty; }
        set { _myProperty = value; }
    }
}

A field is a variable inside a class.

A property looks like a field from outside but can run code when getting or setting.

Examples
This example shows a field name and a property Age that checks the value before setting it.
C Sharp (C#)
public class Person {
    // Field
    public string name;

    // Property
    private int _age;
    public int Age {
        get { return _age; }
        set {
            if (value >= 0) _age = value;
        }
    }
}
This is a simple property with automatic storage, no extra code needed.
C Sharp (C#)
public class Car {
    // Auto-implemented property
    public string Model { get; set; }
}
Sample Program

This program shows how a field and a property work. The property checks if the value is valid before setting it.

C Sharp (C#)
using System;

class Program {
    class Box {
        // Field
        public int length;

        // Property
        private int _width;
        public int Width {
            get { return _width; }
            set {
                if (value >= 0) _width = value;
                else Console.WriteLine("Width cannot be negative");
            }
        }
    }

    static void Main() {
        Box box = new Box();
        box.length = 10; // direct access to field
        box.Width = 5;   // uses property setter
        Console.WriteLine($"Length: {box.length}");
        Console.WriteLine($"Width: {box.Width}");

        box.Width = -3;  // tries to set invalid value
        Console.WriteLine($"Width after invalid set: {box.Width}");
    }
}
OutputSuccess
Important Notes

Fields are simple and fast but offer no control over data.

Properties can have logic to protect or modify data when accessed.

Use properties to keep your class safe and flexible.

Summary

Fields store data directly inside a class.

Properties control how data is accessed or changed.

Properties help keep data safe and add flexibility.

Practice

(1/5)
1. What is the main difference between a field and a property in C#?
easy
A. Properties store data directly, fields control access to data.
B. Fields and properties are exactly the same in C#.
C. Fields store data directly, properties control access to data.
D. Properties can only be used in structs, fields only in classes.

Solution

  1. Step 1: Understand what a field does

    A field is a variable inside a class that holds data directly.
  2. Step 2: Understand what a property does

    A property provides controlled access to data, often using get and set methods.
  3. Final Answer:

    Fields store data directly, properties control access to data. -> Option C
  4. Quick Check:

    Field = direct data, Property = controlled access [OK]
Hint: Fields hold data; properties manage access to it. [OK]
Common Mistakes:
  • Confusing fields and properties as the same.
  • Thinking properties store data directly.
  • Believing fields control access like properties.
2. Which of the following is the correct syntax to declare a property named Age with a private field in C#?
easy
A. int Age; int Age { get; set; }
B. private int Age; public int Age { get; set; }
C. public int age; public int Age;
D. private int age; public int Age { get { return age; } set { age = value; } }

Solution

  1. Step 1: Identify private field declaration

    The private field should be lowercase (e.g., age) and declared as private int age;.
  2. Step 2: Identify property syntax

    The property Age uses get and set to access the private field correctly.
  3. Final Answer:

    private int age; public int Age { get { return age; } set { age = value; } } -> Option D
  4. Quick Check:

    Private field + property with get/set = correct syntax [OK]
Hint: Private field lowercase, property uppercase with get/set. [OK]
Common Mistakes:
  • Using same name for field and property causing errors.
  • Missing get or set in property.
  • Declaring fields as public when they should be private.
3. What will be the output of this C# code?
class Person {
  private string name = "Alice";
  public string Name {
    get { return name; }
    set { name = value; }
  }
}

var p = new Person();
p.Name = "Bob";
Console.WriteLine(p.Name);
medium
A. Bob
B. name
C. Alice
D. Compilation error

Solution

  1. Step 1: Understand property set operation

    The line p.Name = "Bob"; calls the set accessor, changing the private field name to "Bob".
  2. Step 2: Understand property get operation

    The line Console.WriteLine(p.Name); calls the get accessor, returning the updated value "Bob".
  3. Final Answer:

    Bob -> Option A
  4. Quick Check:

    Property set changes value, get returns updated value [OK]
Hint: Property set changes field; get returns updated value. [OK]
Common Mistakes:
  • Assuming output is original field value.
  • Confusing field name with property name.
  • Thinking code causes compilation error.
4. Identify the error in this code snippet:
class Car {
  public int speed;
  public int Speed {
    get { return speed; }
    set { speed = value; }
  }
}

var c = new Car();
c.Speed = 50;
Console.WriteLine(c.speed);
medium
A. Accessing field directly breaks encapsulation.
B. Field and property have the same name causing conflict.
C. No error; code works fine.
D. Property must be static to access field.

Solution

  1. Step 1: Check field and property names

    The field is speed and property is Speed, so no naming conflict.
  2. Step 2: Analyze direct field access

    Accessing c.speed directly bypasses the property, which can break encapsulation and safety.
  3. Final Answer:

    Accessing field directly breaks encapsulation. -> Option A
  4. Quick Check:

    Use properties to protect data, not direct field access [OK]
Hint: Avoid direct field access; use properties for safety. [OK]
Common Mistakes:
  • Thinking same names cause error (case-sensitive).
  • Believing direct field access is always safe.
  • Assuming property must be static.
5. You want to create a class BankAccount where the Balance can be read publicly but only changed inside the class. Which is the best way to declare Balance?
hard
A. public decimal Balance; // public field
B. private decimal balance; public decimal Balance { get; private set; }
C. public decimal Balance { private get; set; }
D. private decimal Balance; public decimal balance { get; set; }

Solution

  1. Step 1: Understand access needs

    Balance should be readable publicly but only settable privately inside the class.
  2. Step 2: Choose property with private set

    Using public decimal Balance { get; private set; } allows public reading but restricts setting to inside the class.
  3. Final Answer:

    private decimal balance; public decimal Balance { get; private set; } -> Option B
  4. Quick Check:

    Public get + private set = controlled access [OK]
Hint: Use property with private set for controlled write access. [OK]
Common Mistakes:
  • Using public field exposes data to unwanted changes.
  • Setting private get hides data from outside.
  • Confusing field and property naming conventions.