- using getter/setters allows for logic to be used in the process
- for gets, null checking can be performed for Singleton Design Patterns or different things can be returned based on state/value.
- for sets, null checking & data validation can be performed on the incoming values
Object Instantiation with Property Sets
When an object is instantiated, the values can be set in the same statement
Car myCar = new Car{Type="Honda",Price=15000};
Class Logic
using System; using System.Collections.Generic; using System.Text; namespace DesignPatterns2016 { public class UsingProperties { private string _name = "default"; private Thingy _thingy; // set allows for validation logic(set) public string Name { get { return _name; } set { var formattedName = value?.Trim(); _name = formattedName; } } //get allows for lazy loading a 'Thingy' object using the getter // used for Singleton Design Pattern public Thingy AThingy { get { if (_thingy == null) { _thingy = new Thingy(); } return _thingy; } set { _thingy = value; } } } public class Thingy { public string Name = "Thingy.Name"; public string Value = "Thingy.Value"; } }
Unit Test
using Microsoft.VisualStudio.TestTools.UnitTesting; using System; namespace DesignPatterns2016.Tests { [TestClass] public class UsingPropertiesTests { [TestMethod] public void TestingThingyGet() { //Assert.AreSame(Using) UsingProperties up = new UsingProperties(); var thingy = up.AThingy; thingy.Name = "NEWNAME"; thingy.Value = "NEWVALUE"; Console.WriteLine($"Thingy Name=\"{thingy.Name}\", Thingy Value: \"{thingy.Value}\""); Assert.AreSame(up.AThingy, up.AThingy); var thingy2 = up.AThingy; Assert.AreSame(thingy, thingy2); } } }
Output
Thingy Name="NEWNAME", Thingy Value: "NEWVALUE"
- Log in to post comments
Tags