


And the main reason is that while inside the constructor, the object is not yet fully constructed. The problem is not with calling instance methods in general from a constructor it is with calling virtual methods (directly or indirectly). OK, now that the confusion regarding class methods vs instance methods is cleared up, I can give an answer :-) There is other clean-up that your destructor needs to do that is not releasing memory). (Note that although Java and C# have garbage collection, that only manages memory allocation. I don't know the behaviour with Java.Ĭ# appears to handle clean-up correctly with this regard. Java and C# don't have destructors, they have finalizers. Note that destructors will have the same issue with virtual methods, thus you cannot have a virtual "cleanup" method that sits outside of your destructor and expect it to get called by the base-class destructor. So in C# not an anti-pattern.Ī common reason for calling methods from constructors is that you have multiple constructors that want to call a common "init" method. If your language is Java where functions are generally virtual by default it makes sense that you have to be extra careful.Ĭ# seems to handle the situation the way you would expect: you can call virtual methods in constructors and it calls the most final version. If it is a pure virtual method without an implementation, this will be an access violation.Ī constructor may call non-virtual functions. In C++ a constructor must beware when calling a virtual function, in that the actual function it is calling is the class implementation.
