Considérons l'application console suivante:C# 4.0 Paramètres par défaut
class Program
{
static void Main()
{
MyInterface test = new MyClass();
test.MyMethod();
Console.ReadKey();
}
}
interface MyInterface
{
void MyMethod(string myString = "I am the default value on the interface");
}
class MyClass : MyInterface
{
public void MyMethod(string myString = "I am the default value set on the implementing class")
{
Console.WriteLine(myString);
}
}
La sortie de ce programme est:
I am the default value on the interface
(1) Pourquoi est-il pas un moyen de spécifier un paramètre comme facultatif sur une interface sans fournir de valeur. Je considère que la valeur par défaut est le détail de l'implémentation. Si nous écrivions ce code dans le style de paramètre pré-optionnel, nous créerions deux surcharges dans l'interface et la valeur par défaut serait spécifiée dans la classe d'implémentation. C'est à dire. nous aurions:
interface MyInterface
{
void MyMethod();
void MyMethod(string myString);
}
class MyClass : MyInterface
{
public void MyMethod()
{
MyMethod("I am the default value set on the implementing class");
}
public void MyMethod(string myString)
{
Console.WriteLine(myString);
}
}
qui sort comme on pouvait s'y attendre,
I am the default value set on the implementing class
(2) Pourquoi ne pouvons-nous remplacer la valeur par défaut dans la classe implémentant!
A bientôt Rich, je vois le problème. Ne serait-il pas plus logique pour eux d'avoir ajouté un mot clé "optionnel" plutôt que d'avoir à fournir une valeur à l'interface? Cela n'a aucun sens pour moi d'avoir à mettre une valeur par défaut sur l'interface. – magritte