public static void Main1() { //** MOST IMPORTANT NOTE: ** All static constructor get called first according to above hierarchy then it calls to normal constructors // Also static constructors can't be called explictly and we can't control the calling of static constructors /* It should always be remembered that constructor creation goes Child to Parent constructor for static constructors * and Parent to Child constructors for normal class constructors */ /* We can't write any access specifier with static constructor. e.g. * * public static StaticClass(){} //It will give a compilation error that "access modifiers are not allowed on static constructors" */ /* We can't create overloaded static constructors. i.e. * * static StaticClass(string str) //It's a compile time error, i.e. "Static constructor must be parameterless" */ //Parent parent = new Parent(); // It'll call Parent static constructor then default Parent class constructor //Console.WriteLine("Parent Class Ends Here\n\n"); //Child child = new Child(); // It'll call child static then Parent static constructor then Parent default constructor then child class default constructor //Parent parentChild = new Child(); // Constructor calling order will be similar to above style //Console.WriteLine("Child Class Ends Here\n\n"); //ChildOfChild childOfChild = new ChildOfChild(); // constructor Calling order will be ChildOfChild then Child then Parent class static constructors first Child parentOfChildOfChild = new ChildOfChild(); // afterwards Parent then Child then ChildOfChild normal constructors //Parent parentChildOfChild = new ChildOfChild(); // Constructor calling order for this and above 2 lines would be same //Console.WriteLine("Child Class Ends Here\n\n"); Console.ReadKey(); }
public static void Main1() { //var obj = new { city = "New York" }; //Console.WriteLine(obj.city); // New York //dynamic obj1 = new { city = "New York 2" }; //Console.WriteLine(obj1.city); // New York 2 //Console.WriteLine(20 + 45 + "A"); // 65A //Console.WriteLine("A" + 20 + 45); // A2045 //Console.WriteLine(20 + "A" + 45); // 20A45 //int hoogtePlaatjes = 900; //int breedtePlaatjes = 600; //double verHs = (hoogtePlaatjes / breedtePlaatjes); //Parent oParent = new Parent(); //Parent oParentChild = new Child(); //Child oChild = new Child(); //Child oChildP = new Parent(); //----------Its a compile time errer //Child oChildParent = (Child)new Parent(); //----------Its a run time errer //Parent objParent = new Parent(); //Console.WriteLine("Parent: " + objParent.GetTypeWithoutOverRiding()); //Console.WriteLine("Parent: " + objParent.GetTypeWithOverRiding()); //Console.WriteLine("Parent: " + objParent.StopOverRiding()); //Console.WriteLine("Parent Class Ends Here\n"); //Child objChild = new Child(); //Console.WriteLine("Child: " + objChild.GetTypeWithoutOverRiding()); //Console.WriteLine("Child: " + objChild.GetTypeWithOverRiding()); //Console.WriteLine("Child: " + objChild.StopOverRiding()); //Console.WriteLine("Child Class Ends Here\n"); Parent objParentChild = new Child(); // It will call both level constructers i.e. Parent & Child class constructors //Parent objParentChild = new Child(""); Console.WriteLine("Parent-Child: " + objParentChild.GetTypeWithoutOverRiding()); // this one will call to Parent class method GetTypeWithoutOverRiding() Console.WriteLine("Parent-Child: " + objParentChild.GetTypeWithOverRiding()); // this one will call to Child class method GetTypeWithOverRiding() Console.WriteLine("Parent-Child: " + objParentChild.StopOverRiding()); //Console.WriteLine("Parent-Child: " + objParentChild.OnlyChildMethod()); // this one will give compilation method that class doesn't contain any definition for OnlyChildMethod Console.WriteLine("Parent-Child Class Ends Here\n"); //Parent objParentChildofChild = new ChildOfChild(); // It will call all three level constructers i.e. Parent, Child & then ChildOfChild class constructors //Console.WriteLine("Parent-Child: " + objParentChildofChild.GetTypeWithoutOverRiding()); // this one will call to Parent class method GetTypeWithoutOverRiding() //Console.WriteLine("Parent-Child: " + objParentChildofChild.GetTypeWithOverRiding()); // this one will call to ChildOfChild class method GetTypeWithOverRiding() //Console.WriteLine("Parent-Child: " + objParentChildofChild.StopOverRiding()); //Console.WriteLine("Parent-ChildofChild Class Ends Here\n"); ChildOfChild objChildOfChild = new ChildOfChild(); // It will call all three level constructers i.e. Parent, Child & then ChildOfChild class constructors //Console.WriteLine("ChildOfChild: " + objChildOfChild.GetTypeWithoutOverRiding()); //Console.WriteLine("ChildOfChild: " + objChildOfChild.GetTypeWithOverRiding()); //Console.WriteLine("ChildOfChild: " + objChildOfChild.StopOverRiding()); // this one will call to child class method StopOverRiding() //Console.WriteLine("ChildOfChild Class Ends Here"); Console.ReadKey(); }