public static void Main()
Console.WriteLine("\n--------- Default Constructor --------- ");
var _userDefault = new User();
Console.WriteLine("UserName : " + _userDefault.UserName);
Console.WriteLine("Password : " + _userDefault.Password);
Console.WriteLine("\n\n--------- Parameterized Constructor --------- ");
var _userParameterized = new User("TechPoint", "********");
Console.WriteLine("UserName : " + _userParameterized.UserName);
Console.WriteLine("Password : " + _userParameterized.Password);
Console.WriteLine("\n\n--------- Copy Constructor --------- ");
var _userCopy = new User(_userParameterized);
Console.WriteLine("UserName : " + _userCopy.UserName);
Console.WriteLine("Password : " + _userCopy.Password);
Console.WriteLine("\n\n--------- OUT and REF Parameterized Constructor --------- ");
string _refParameter = "REF parameter";
var _userParam = new User(out _outParameter, ref _refParameter);
Console.WriteLine("OUT Parameter : " + _outParameter);
Console.WriteLine("REF Parameter : " + _refParameter);
Console.WriteLine("\n\n--------- Structure with Constructor --------- ");
var _struct = new MyStructure("MyInputParameter");
var _structOptional = new MyStructure(10);
Console.WriteLine("\n\n--------- Private Constructor --------- ");
var _superAdmin = new SuperAdmin("Dashboard","********");
Console.WriteLine("AccessArea : " + _superAdmin.AccessArea);
Console.WriteLine("AccessCode : " + _superAdmin.AccessCode);
Console.WriteLine("AccessToken : " + SuperAdmin.AccessToken);
Console.WriteLine("\n\n--------- Constructor Chaining--------- ");
var _constructorChain = new SuperAdmin("********");
Console.WriteLine("AccessArea : " + _constructorChain.AccessArea);
Console.WriteLine("AccessCode : " + _constructorChain.AccessCode);
Console.WriteLine("AccessToken : " + SuperAdmin.AccessToken);
Console.WriteLine("\n\n--------- Constructor with Exception --------- ");
var _superAdminObject = new SuperAdmin("ProfitAndLossReport","");
Console.WriteLine("AccessArea : " + _superAdmin.AccessArea);
Console.WriteLine("AccessCode : " + _superAdmin.AccessCode);
Console.WriteLine("AccessToken : " + SuperAdmin.AccessToken);
Console.WriteLine("Private constructor of Program class is called.");
Console.WriteLine("Static Constructor of User class is called.");
Console.WriteLine("User defined Default constructor of User class is called.");
this.UserName = "UnKnown";
public User(string userName, string password)
Console.WriteLine("Parameterized Constructor of User class is called.");
this.UserName = userName;
this.Password = password;
Console.WriteLine("Copy Constructor of User class is called.");
this.UserName = user.UserName;
this.Password = user.Password;
public string UserName {get; set;}
public string Password {get; set;}
public User(out string outParameter, ref string refParameter)
Console.WriteLine("Parameterized constructor of User class with OUT and REF type parameter is called.");
outParameter = "OUT Parameter of User Class";
refParameter = "REF Parameter of User Class";
public abstract class BaseClass
public BaseClass(params string[] input)
Console.WriteLine("Base Abstract Class params Parameterized Constructor is called.");
public BaseClass(string x)
Console.WriteLine("Base Abstract Class Constructor is called.");
public class SuperAdmin : BaseClass
private static string _token = null;
private SuperAdmin() : base()
Console.WriteLine("Private Constructor of SuperAdmin class is called.");
if(String.IsNullOrWhiteSpace(this.AccessArea))
Console.WriteLine("Default Access Area is allocated");
this.AccessArea = "Reports";
if(String.IsNullOrWhiteSpace(this.AccessCode))
Console.WriteLine("Please provide vaild AccessCode.");
public SuperAdmin(string accessCode) : this()
Console.WriteLine("Public Constructor of SuperAdmin class is called. Which initiate the constructor chaining.");
this.AccessCode = accessCode;
_token = GetToken(this.AccessArea, this.AccessCode);
public SuperAdmin(string accessArea, string accessCode)
Console.WriteLine("Public Constructor of SuperAdmin class is called.");
this.AccessArea = accessArea;
this.AccessCode = accessCode;
if(String.IsNullOrWhiteSpace(this.AccessCode))
throw new Exception("Please provide vaild AccessCode.");
_token = GetToken(this.AccessArea, this.AccessCode);
public string AccessArea {get; set;}
public string AccessCode {get; set;}
public static string AccessToken {get { return _token;}}
private string GetToken(string area, string code)
return "Access Token Generated Successfully for : " + area;
public struct MyStructure
Console.WriteLine("Static Constructor of structure is called.");
public MyStructure(string inputParameter)
Console.WriteLine("Parameterized Constructor of structure is called with value : " + inputParameter);
public MyStructure(int inputParameter1, string optionalParameter = "")
Console.WriteLine("Optional Parameterized Constructor of structure is called with value : " + inputParameter1);