I've the same feeling and like the C++ approach. The C# approach is the same
as the Java one. That's sometimes the cause of really interesting debugging
sessions... I'm assuming they implemented it the way it is because that's
much simpler.

Regards, Bert


-----Original Message-----
From: Stephen Dunn [mailto:[EMAIL PROTECTED]
Sent: Thursday, June 19, 2003 3:59 PM
To: [EMAIL PROTECTED]
Subject: [ADVANCED-DOTNET] 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

Reply via email to