it is indeed weird that C# would call from the base class the derived
method. That kind of behaviour you'd expect from calling abstract
methods in the base class. 

FB

> 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