Thanks for the info.

I knew that they must have had a reason, I just didn't know what it was.

Ian, thanks for the link to Michael Feather's  article.  I haven't read it
yet, but he usually has good things to say.



______________________________
- David Lanouette
- [EMAIL PROTECTED]

"Excellence, then, is not an act, but a habit" - Aristotle





> -----Original Message-----
> From: Discussion of advanced .NET topics.
> [mailto:[EMAIL PROTECTED] On Behalf Of
> Fabian Schmied
> Sent: Saturday, July 08, 2006 3:44 AM
> To: ADVANCED-DOTNET@DISCUSS.DEVELOP.COM
> Subject: Re: [ADVANCED-DOTNET] Virtual methods in .NET - was
> Implementing an Interface - C# vs. VB.NET
>
> [...]
>
> > If you're overriding a method, you need the other
> documentation - the
> > one that is rarely provided, or if provided is incomplete:
> what other
> > methods in the ancestor class will call it - and you need
> to make sure
> > you don't call them, to avoid an accidental infinite loop.
> You need to
> > know what the state of the class will be - fully initialized, what
> > invariants hold. You need to know what other methods are
> safe to call
> > and when.
>
> [...]
>
> > Unless you missed the whole start of my email - i.e. the
> bit where I
> > point out that it's not for performance reasons "only", or even
> > primarily.
>
> Following up on this, here's what Anders Hejlsberg has to say
> about it [1]:
>
> <quote>
> There are several reasons. One is performance. We can observe
> that as people write code in Java, they forget to mark their
> methods final.
> Therefore, those methods are virtual. Because they're
> virtual, they don't perform as well. There's just performance
> overhead associated with being a virtual method. That's one issue.
>
> A more important issue is versioning. There are two schools
> of thought about virtual methods. The academic school of
> thought says, "Everything should be virtual, because I might
> want to override it someday." The pragmatic school of
> thought, which comes from building real applications that run
> in the real world, says, "We've got to be real careful about
> what we make virtual."
>
> When we make something virtual in a platform, we're making an
> awful lot of promises about how it evolves in the future. For
> a non-virtual method, we promise that when you call this
> method, x and y will happen. When we publish a virtual method
> in an API, we not only promise that when you call this
> method, x and y will happen. We also promise that when you
> override this method, we will call it in this particular
> sequence with regard to these other ones and the state will
> be in this and that invariant.
>
> Every time you say virtual in an API, you are creating a call
> back hook. As an OS or API framework designer, you've got to
> be real careful about that. You don't want users overriding
> and hooking at any arbitrary point in an API, because you
> cannot necessarily make those promises. And people may not
> fully understand the promises they are making when they make
> something virtual.
> </quote>
>
> Herb Sutter also has an interesting article about virtual
> methods, which is somewhat related: he says not to make
> virtual functions public (or public functions virtual) [2].
>
> Fabian
>
> [1] http://www.artima.com/intv/nonvirtual.html
> [2] http://www.gotw.ca/publications/mill18.htm
>
> ===================================
> This list is hosted by DevelopMentorR  http://www.develop.com
>
> View archives and manage your subscription(s) at
> http://discuss.develop.com
>

===================================
This list is hosted by DevelopMentorĀ®  http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com

Reply via email to