Abbiamo una semplice classe e il metodo principale:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
namespace Rextester
{
public class Program
{
public static void Main(string[] args)
{
bar bar = new bar();
bar.foo("a");
}
}
public class bar
{
public void foo(String a, String b = "b")
{
Console.WriteLine("Foo1");
}
}
}
Questo scriverà
Foo1
nella console.
Ora, aggiungiamo un sovraccarico del metodo nella classe, utilizzando parametri facoltativi :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
namespace Rextester
{
public class Program
{
public static void Main(string[] args)
{
bar bar = new bar();
bar.foo("a");
}
}
public class bar
{
public void foo(String a, String b = "b")
{
Console.WriteLine("Foo1");
}
public void foo(String a)
{
Console.WriteLine("Foo2");
}
}
}
Questo scriverà
Foo2
nella console.
Mi aspettavo errore nella compilazione perché mi aspetto che foo (String a, String b="b") rappresenti sia foo (String a) che foo (String a, String b) signature, a causa dei parametri opzionali. Ma mi sbagliavo. Perché è permesso?