Search code examples
c#theoryconst-correctness

"const correctness" in C#


The point of const-correctness is to be able to provide a view of an instance that can't be altered or deleted by the user. The compiler supports this by pointing out when you break constness from within a const function, or try to use a non-const function of a const object. So without copying the const approach, is there a methodology I can use in C# that has the same ends?

I'm aware of immutability, but that doesn't really carry over to container objects to name but one example.


Solution

  • I've come across this issue a lot of times too and ended up using interfaces.

    I think it's important to drop the idea that C# is any form, or even an evolution of C++. They're two different languages that share almost the same syntax.

    I usually express 'const correctness' in C# by defining a read-only view of a class:

    public interface IReadOnlyCustomer
    {
        String Name { get; }
        int Age { get; }
    }
    
    public class Customer : IReadOnlyCustomer
    {
        private string m_name;
        private int m_age;
    
        public string Name
        {
            get { return m_name; }
            set { m_name = value; }
        }
    
        public int Age
        {
            get { return m_age; }
            set { m_age = value; }
        }
    }