C# Properties

In C#, properties play a crucial role in accessing and updating data. A property is a class member that allows users to read, write, or formulate the value of a private field in the class. Properties are special methods that allow you to access (get) or modify (set) the values of private variables within a class. Rather than directly accessing variables, properties provide a controlled way to retrieve or update the data.

Properties provide a way to expose data while encapsulating(hiding) the details of “how it works”, allowing control over how the data is accessed or modified.

A property in C# consists of:

  1. Getter (for reading the value)
  2. Setter (for writing the value)

You can also have either of two i.e read-only or write-only property depending on your needs.

Syntax of a Property

 
public class Person
{
    private string name;  // Private field

    // Property for Name
    public string Name
    {
        get { return name; }    // For retrieving the value
        set { name = value; }   // For setting the value
    }
}

In the above example, Name is a property, while name is a private field that holds the actual value.

Types of Properties

C# provides various types of properties to meet different needs:

  1. Auto-Implemented Properties: These properties are simpler. C# creates a backing field automatically for you.

    
    public class Person
    {
        public string Name { get; set; }  // Auto-implemented property
    }
    
    

  2. Read-Only Properties: These properties are accessible for reading but cannot be modified from outside the class.

    
    public class Person
    {
        public string Name { get; }
    
        public Person( string name)
        {
            Name = name; // Sets during the object creation and cannot be changed after that
        }
    }
    
    

  3. Write-Only Properties: In C#, a write-only property is a property that can only be set but cannot be read. This can be achieved by providing only a set accessor and not a get accessor. This might be useful in some scenarios where you want to protect some sensitive data (like passwords) from being accessed directly from but still want to allow modifications.

    
    public class Person
    {
        private string name;
    
        public string Name
        {
            set { name = value; }  // Here, only the setter is available
        }
    }
    
    

  4. Computed Properties: In C#, a computed property is a property that doesn't directly store a value but instead calculates and returns a value based on other fields or properties when accessed. These properties are often used for situations where the value is derived or needs to be calculated on the fly, rather than being stored explicitly in a backing field.

    
    public class Rectangle
    {
        // Private fields
        private double length;
        private double width;
    
        // Property to calculate the area of the rectangle
        public double Area
        {
            get { return length * width; }  // The area is calculated by multiplying length and width
        }
    
        // Constructor to initialize the rectangle dimensions with specific length and width values
        public Rectangle(double length, double width)
        {
            this.length = length;  // Assigning the passed length to the instance field
            this.width = width;    // Assigning the passed width to the instance field
        }
    }
    
    

    In the Main method, create an object of Rectangle class, and pass values.

    
    public class Program
    {
        public static void Main(string[] args)
        {
            // Rectangle object with length = 5.0 and width = 3.0
            Rectangle myRectangle = new Rectangle(5.0, 3.0);
    
            Console.WriteLine("The area of the rectangle is: " + myRectangle.Area);
        }
    }
    
    

Why Use Properties?

Properties offer several advantages in C#:

  • Encapsulation: You can protect your data by making fields private and only exposing them through controlled properties.
  • Validation: You can add logic inside the setter to validate data before setting a field.
  • Read-Only and Write-Only Fields: With properties, you can create fields that are either read-only or write-only.
  • Calculated Values: You can create properties that dynamically calculate values based on other fields.
  • Change Notification: In UI applications, properties can notify the system when their values change, allowing automatic updates.
Conclusion

Properties in C# are a powerful feature that allows developers to create flexible, maintainable, and organized code.

By using properties, you can ensure better data management, follow object-oriented best practices, and build more robust and maintainable applications.