2011-03-18 16 views
11

¿Existe alguna forma de utilizar los valores de tiempo de ejecución para los parámetros de método opcionales?¿Por qué los parámetros opcionales en C# 4.0 requieren constantes de tiempo de compilación?

+0

posible duplicado de [No se puede usar String.Empty como valor predeterminado para un parámetro opcional en C# - entonces, ¿cuál es el punto?] (Http://stackoverflow.com/questions/2701314/cannot-use-string-empty- as-a-default-value-for-an-optional-parameter-in-c-sharp) – nawfal

Respuesta

11

Los parámetros opcionales se requieren para ser constantes porque se escriben como valores de un atributo. Por lo tanto, heredan todas las restricciones que tiene un valor de atributo.

No hay forma de codificar directamente un valor de tiempo de ejecución. Sin embargo, usted puede acercarse con el patrón siguiente

public void MyApi(SomeType type = null) { 
    type = type ?? new SomeType(); 
    ... 
} 
+1

Gracias, eso parece un buen truco. Por curiosidad, ¿sabes por qué se implementan utilizando atributos? ¿Asumo reutilizar lo que ya está en el marco? –

+1

@Joan IIRC se realiza con atributos porque así es como lo hacen otros lenguajes (VB.Net) y, por lo tanto, proporciona compatibilidad con ellos. – JaredPar

+1

@Joan: al usar atributos, no rompen los idiomas que no tienen esta característica. Recuerde, todo en .NET se compila en un formato que debe ser neutral en cuanto al idioma ... Los atributos son una manera limpia de manejar parámetros opcionales en un idioma específico, sin necesidad de romper los cambios a otros lenguajes .NET. –

5

Los parámetros opcionales se compilan en el conjunto y, como tales (como todo lo que se designa como const), deben ser una constante en tiempo de compilación.

Y no, no puede usar valores de tiempo de ejecución como parámetros opcionales.

+1

Gracias, pero no se puede compilar con una referencia a una referencia en tiempo de ejecución? Así que di algo como: this.Filename, etc. dentro de la misma clase? –

5

parámetros opcionales se determinan en tiempo de compilación y sustituido en el método si se llama a un método con muy pocos parámetros. Se manejan mediante la adición de un atributo al parámetro en el IL del método.

Como tales, deben resolverse completamente en tiempo de compilación (tanto para la creación, ya que son un atributo, pero también cuando se usan). No hay forma de utilizar los valores de tiempo de ejecución para los parámetros de método opcionales.

Cuestiones relacionadas