me di cuenta de que con los parámetros opcionales en C# 4 Si especifica un parámetro como opcional en una interfaz que no tienes que hacer que el parámetro opcional en cualquier clase de aplicación:¿Por qué los parámetros opcionales C# 4 definidos en la interfaz no se aplican en la clase de implementación?
public interface MyInterface
{
void TestMethod(bool flag = false);
}
public class MyClass : MyInterface
{
public void TestMethod(bool flag)
{
Console.WriteLine(flag);
}
}
y por lo tanto:
var obj = new MyClass();
obj.TestMethod(); // compiler error
var obj2 = new MyClass() as MyInterface;
obj2.TestMethod(); // prints false
¿Alguien sabe por qué los parámetros opcionales están diseñados para funcionar de esta manera?
Por un lado, supongo que la capacidad de anular los valores predeterminados especificados en las interfaces es útil, aunque para ser sincero no estoy seguro de si debe incluso especificar valores predeterminados en la interfaz, ya que debe ser una implementación decisión.
Por otro lado, esta desconexión significa que no siempre se puede utilizar la clase concreta y la interfaz de forma intercambiable. Esto, por supuesto, no sería un problema si el valor predeterminado se especifica en la implementación, pero si expones tu clase concreta como interfaz (usando algún marco IOC para inyectar la clase concreta, por ejemplo) entonces realmente no hay punto que tiene el valor predeterminado, ya que la persona que llama tendrá que proporcionar siempre de todos modos.
¿Porque son opcionales? – Oded
Pero puede convertir la instancia de objeto en 'MiInterfaz' y llamarlo con el parámetro opcional:' ((MiInterfaz) obj). MétodoTest(); '. –
@oded - pero si usted dice que este parámetro es opcional en el contrato, ¿por qué permite que el implementador no lo haga opcional? ¿Eso no solo causa confusión a cualquiera que quiera usar el contrato? – theburningmonk