İyi kod kendini mümkün olduğunca az tekrar eden kod dur. Bu düşünceyi constructorlara uygulayacak olursak :
public sealed class Student
{
private string _Name, _Surname;
private byte _Age;
public byte Age
{
get { return _Age; }
set { _Age = value; }
}
public string Surname
{
get { return _Surname; }
set { _Surname = value; }
}
public string Name
{
get { return _Name; }
set { _Name = value; }
}
public Student() { }
public Student(string name)
{
this.Name = name;
}
public Student(string name, string surname) : this(name)
{
this.Surname = surname;
}
public Student(string name, string surname, byte age) : this(name, surname)
{
this.Age = age;
}
}
Student nS = new Student("Özgür", "Belül", 18);
Console.WriteLine(nS.Age + " " + nS.Name + " " + nS.Surname);
Singleton kalıbını doğru bir şekilde kullanmıyorsanız class içerisinden sadece static method çağırsanız bile instance yaratmış olabilirsiniz. Belki de hiç kullanmayacağınız bu instance bellekte boşu boşuna yer işgal eder. Bu sorunu Singleton kalıbını lazy olarak tasarlarsanız aşabilirsiniz. Aşağıdaki gibi bir kullanımda construtorlara breakpoint koyup Singleton class'ı içerisinden MyMethod1()'i çağırdığınızda instance yaratılmadığını ancak metodun çağırılabilir olduğunu göreceksiniz. Instance sadece gerektiğinde oluşturuluyor.
public sealed class Singleton
{
Singleton()
{
Console.WriteLine("Singleton contructor çalıştı.");
}
public
static Singleton Instance
{
get
{
return Nested.instance;
}
}
public
static void MyMethod1()
{
Console.WriteLine("MyMethod1 çalıştı..");
}
public void MyMethod2()
{
Console.WriteLine("MyMethod2 çalıştı..");
}
class Nested
{
static Nested()
{
instance = new Singleton();
Console.WriteLine("Nested constructor çalıştı");
}
internal static readonly Singleton instance;
}
}