Write Less Code: C# Properties
I inherited the responsibility of maintaining an internal development tool implemented in C#. I recently added new classes to extend the tool’s functionality. Several of the new classes uses several properties, and I found myself writing code similar to the following:
class Shape { private int _width; private int _height; private bool _isVisible; public int Width { get { return _width; } } public int Height { get { return _height; } } public bool IsVisible { get { return _isVisible; } set { _isVisible = value; } } /* ... more code, including fields, properties, and functions ... */ }
Implementation of properties as is done in the above source code can fill whole screens. I found a concise way to write the above code while browsing references, and I present it here:
class Shape { public int Width { get; } public int Height { get; } public bool IsVisible { get; set; } /* ... more code, including fields, properties, and functions ... */ }
According to Microsoft’s C# Programming Guide1, with auto-implemented properties, “the compiler creates a private, anonymous backing field that can only be accessed through the property’s get and set accessors.” Separate fields for auto-implemented properties are not used because of private, anonymous backing fields. Setting property values for auto-implemented properties without set accessors can be done by providing an initialization value when creating the auto-implemented property or by assigning a value to the auto-implemented property within the constructor. A reduction of lines is evident in the above source code.