为什么默认情况下Java中的方法是虚拟的,但C#中默认情况下是非虚拟的?

Java中,默认情况下,方法是虚拟的; C#是相反的.

哪个更好?每种方法有哪些优点和缺点?

最佳答案
Anders Hejlsberg:(C#首席架构师)

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.

转载注明原文:为什么默认情况下Java中的方法是虚拟的,但C#中默认情况下是非虚拟的? - 代码日志