Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is C# a single dispatch or multiple dispatch language?

I'm trying to understand what single and multiple dispatch are, exactly.

I just read this:
http://en.wikipedia.org/wiki/Multiple_dispatch

And from that definition is seems to me that C# and VB.Net are multiple-dispatch, even though the choice of which overload to call is made at compile-time.

Am I correct here, or am I missing something? Thanks!

like image 683
Daniel Magliola Avatar asked Jan 26 '09 14:01

Daniel Magliola


People also ask

What is this C language?

C is an imperative procedural language supporting structured programming, lexical variable scope, and recursion, with a static type system. It was designed to be compiled to provide low-level access to memory and language constructs that map efficiently to machine instructions, all with minimal runtime support.

Is C -- a coding language?

C is a powerful general-purpose programming language. It can be used to develop software like operating systems, databases, compilers, and so on.

Is C same as C+?

While both C and C++ may sound similar, their features and usage are different. C is a procedural programming language and does not support objects and classes. C++ is an enhanced version of C programming with object-oriented programming support.


1 Answers

OK, I understood the subtle difference where function overloading is different from multiple-dispatch.

Basically, the difference is whether which method to call is chosen at run-time or compile-time. Now, I know everybody's said this, but without a clear example this sounds VERY obvious, given that C# is statically typed and multiple-dispatch languages (apparently to me, at least) seem to be dynamically typed. Up to now, with just that definition multiple-dispatch and function overloading sounded exactly the same to me.

The case where this makes a real difference is when you have 2 overloads of a method which differ on the type of a parameter, but the 2 types are polymorphic, and you call with a reference declared as the higher type, which has an object of the lower type... (If someone can think of a better way to express this, please feel free to edit this answer)

Example:

int CaptureSpaceShip(IRebelAllianceShip ship) {} int CaptureSpaceShip(XWing ship) {}  void Main() {    IRebelAllianceShip theShip = new XWing();   CaptureSpaceShip(theShip); } 

XWing obviously implements IRebelAllianceShip. In this case, the first method will be called, whereas if C# implemented multiple-dispatch, the second method would be called.

Sorry about the doc rehash... This seems to me the clearest way to explain this difference, rather than just reading the definitions for each dispatch method.

For a more formal explanation: http://en.wikipedia.org/wiki/Double_dispatch#Double_dispatch_is_more_than_function_overloading

like image 155
Daniel Magliola Avatar answered Sep 22 '22 21:09

Daniel Magliola