class A{public A(string text){Console.WriteLine(text);}}class B{static A a1 = new A(“a1”);A a2 = new A(“a2”);static B(){a1 = new A(“a3”);}public B(){a2 = new A(“a4”);}}class Program{static void Main(string[] args){B b = new B();}}
Before any code of the type B gets executed, its static constructor will be invoked first. It initializes static data fields and then executes statements inside the static constructor. Therefore, it prints a line of “a1”, and then another line of “a3”.
When the execution flow reaches the statement B b = new B(), the ordinary constructor is invoked. It initializes its data fields first and then the statements in its constructor method, so it prints a line of “a2”, and then another line of “a4”.
Output:
a1
a3
a2
a4
Good question for the interview. I will try remember it!
LikeLike