What is the difference in how these objects are instantiated?

asp.net, c#, object-initialization

Solution

Field initializers runs before the constructor call. So In Case 1 your object of `PersonDataContext` will be created before the constructor call.

PersonDataContext persons = new PersonDataContext();

In 2nd case, your constructor will execute first and then it will initialize the field.

You can do a simple test

class PersonDataContext
{
    public PersonDataContext()
    {
        Console.WriteLine("In PersonDataContext Constructor");
    }
}
class Data
{
    PersonDataContext persons = new PersonDataContext();
    public Data() 
    {
        Console.WriteLine("In Data Contructor");
    }
}

class Data2
{
    PersonDataContext persons;
    public Data2() 
    {
        Console.WriteLine("In Data2 Constructor");
        persons = new PersonDataContext();
    }
}

and then in your Main method

static void Main(string[] args)
{

    Data d1 = new Data();
    Data2 d2 = new Data2();
    Console.Read();
}

Output

In PersonDataContext Constructor // Case 1

In Data Contructor //Case 1

In Data2 Constructor //Case 2

In PersonDataContext Constructor // Case 2

For the asp example, In first case your Field is initialized before the `Page_Load` event, and in 2nd case your Field is initialized in the `Page_Load` event

Problem

What is the difference between the two cases below: ``` class Data { PersonDataContext persons = new PersonDataContext(); public Data() {} } ``` versus ``` class Data { PersonDataContext persons; public Data() { persons = new PersonDataContext(); } } ``` I have the same question in asp.net: ``` public partial class Data : System.Web.UI.Page { PersonDataContext persons = new PersonDataContext(); protected void Page_Load(object sender, EventArgs e) { } } ``` versus ``` public partial class Data : System.Web.UI.Page { PersonDataContext persons; protected void Page_Load(object sender, EventArgs e) { persons = new PersonDataContext(); } } ```

Original source