c# - reservada - referencia microsoft csharp
¿La palabra clave dinámica en C#4 es compatible con los métodos de extensión? (4)
Estoy escuchando una charla sobre dynamic
palabra clave dynamic
C # 4 y me pregunto ... ¿Esta característica será ortogonal a otras características de .NET, por ejemplo, admitirá métodos de extensión?
public static class StrExtension {
public static string twice(this string str) { return str + str; }
}
...
dynamic x = "Yo";
x.twice(); // will this work?
Nota: Esta pregunta fue hecha antes de que se enviara C # 4, razón por la cual está redactado en tiempo futuro.
De la palabra "Nuevas características en C # 4" :
La búsqueda dinámica no podrá encontrar métodos de extensión. Si los métodos de extensión se aplican o no depende del contexto estático de la llamada (es decir, qué cláusulas de uso se producen), y esta información de contexto no se mantiene actualmente como parte de la carga útil.
Esto funciona, lo que me parece interesante al menos ...
public static class StrExtension
{
public static string twice(this string str) { return str + str; }
}
...
dynamic x = "Yo";
StrExtension.twice(x);
Aún así, si el compilador puede encontrar el método de extensión correcto en el momento de la compilación, entonces no veo por qué no puede empaquetar un conjunto de métodos de extensión para ser consultados en el tiempo de ejecución. Sería como una tabla v para métodos no miembros.
EDITAR:
Esto es genial ... http://www2.research.att.com/~bs/multimethods.pdf
No puede funcionar, los métodos de extensión funcionan dependiendo de que el espacio de nombres esté incluido en el archivo y, hasta donde yo sé, MSIL no tiene idea de los archivos ni de los espacios de nombres.
Puede crear un método de extensión para el objeto y asignarlo a una dinámica :
public static void MyExt(this object o) {
dynamic d = o;
d.myProp = "foo";
}
y llámalo así:
ClassWithMyProp x;
x.MyExt();