Interesting -- I tried it in Java too; it behaves the same as C#.  Perhaps
the Java guys have some perspective to offer?

-----Original Message-----
From: Stephen Dunn [mailto:[EMAIL PROTECTED]
Sent: Thursday, June 19, 2003 9:59 AM
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