I am curious to know that whether optional parameter introduced in C#4 is backward compatible or not?
Let me clarify my question with a simple example. Suppose I write the following code in C#4 on .Net2 in VS2010:
public void Foo(int val1, int val2, int val3 = 5){ .... }
Now I compiled the code, make a dll and reference it to a C#2 / C#3 project on .Net2. In the code editor (other than VS2010, say VS2008) what I'll see in intellisense?
Two overloaded methods like:
public void Foo(int val1, int val2)
public void Foo(int val1, int val2, int val3)
Something else like:
public void Foo(int val1, int val2, int val3)
public void Foo(int val1, int val2, int val3 = 5) //VS2008 is not supposed to show this
How I am supposed to call the C#4 method in C#2 project?
It'll just be one method - the C# compiler doesn't create overloads. It will be just as if you're calling a method created in VB.NET with optional parameters - they've been in .NET right from the start. It's just that the C# 2 compiler won't know how to deal with them, so you'll have to specify all the arguments yourself.
Basically optional parameters only change how methods are called. If there's a method like this:
public void Foo(int x = 10, int y = 20)
and you call it like this:
Foo(15);
the C# 4 compiler will change the calling side to:
Foo(15, 20);
The C# 2 compiler can't do that, so you'd have to specify both arguments.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With