#1, 023 – Fields Are Initialized Before Execution of Constructors

When you declare a field in a class and initialize the field when it is declared, the initialization of the field will happen when an instance of the class is created, but before the constructor is invoked.  All fields are initialized before the constructor executes, in the order in which they are declared.

Assume that we have a Dog class defined as follows:

    public class Dog
        public string Sound = "Woof";
        public Cat Friend = new Cat("Garfield");
        public string Name { get; set; }

        public Dog(string name)
            Console.WriteLine("Dog constructor for {0}, Sound is {1}", name, Sound);
            Name = name;

When we create an instance of a Dog, the Sound and Friend fields are initialized before the Dog constructor is invoked.

            Dog d = new Dog("Kirby");



About Sean
Software developer in the Twin Cities area, passionate about software development and sailing.

One Response to #1, 023 – Fields Are Initialized Before Execution of Constructors

  1. Peter says:

    I’m not sure this is strictly true.

    “The instance field variable initializers of a class correspond to a sequence of assignments that are executed immediately upon entry to any one of the instance constructors (Section 10.10.1) of that class. The variable initializers are executed in the textual order in which they appear in the class declaration. The class instance creation and initialization process is described further in Section 10.10.” (found from http://msdn.microsoft.com/en-us/library/aa645759(v=vs.71).aspx)

    So yes, as far as a coder is concerned it will run before any of their custom constructor code is run, but it is still run as part of the constructor you just don’t “see” it.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: