Stephen, Well, I don't think it's an issue of being correct here. The downside of the way it is implemented in .NET is that you can call a method of a partially constructed object---just as you have pointed out. The negative thing about the C++ approach is that you wind up with different semantics for calling virtual method in constructor and non-constructor code.
Regards, Stefan >-----Original Message----- >From: [EMAIL PROTECTED] >[mailto:[EMAIL PROTECTED] On Behalf >Of Stephen Dunn >Sent: Thursday, June 19, 2003 3:59 PM >To: 'Moderated discussion of advanced .NET topics.' >Subject: Partially constructed objects in C# > > >Thanks to FxCop, I've just discovered quite a fundamental >difference between >C++ and C#. > >Check out the following code. > > class Base > { > public Base( ) > { > Method( ) ; > } > > public virtual void Method( ) > { > Console.Write("I'm the Base"); > } > } > > class Derived > : Base > { > public Derived( ) > { > Method( ) ; > } > > public override void Method() > { > Console.WriteLine("I'm the Derived"); > } > } > >Constructing a Derived object means a call is made to Base's >constructor which calls Method; not Base's method (as in C++), >but Derived's Method. At this point, Derive is only partially >constructed. When I stumbled over this in C++, I was surprised >that the base constructor didn't call the derived method. I >soon changed my mind when it was explained to me that C++ is >implemented this way as unexpected results could happen by >called Derived's virtual method. > >Would anyone like to comment? Personally, I feel C++ is >correct in this instance. > >Cheers, > >Steve >