Será que a palavra-chave dynamic no C#4 suporte de métodos de extensão?
-
06-07-2019 - |
Pergunta
Eu sou ouvir uma palestra sobre C#4's dynamic
palavra-chave e eu estou querendo saber...Será que este recurso seja ortogonal aos outros .Recursos de rede, como, por exemplo, vai apoiar os métodos de extensão?
public static class StrExtension {
public static string twice(this string str) { return str + str; }
}
...
dynamic x = "Yo";
x.twice(); // will this work?
Nota: Esta pergunta foi feita antes C#4 foi enviado pelo que é formulada no tempo futuro.
Solução
De "Novos recursos em C# 4" Word Doc:
A pesquisa dinâmica não será capaz de encontrar métodos de extensão. Se os métodos de extensão se aplicam ou não depende do contexto estático da chamada (ou seja, que o uso de cláusulas ocorrem), e essas informações de contexto não são atualmente mantidas como parte da carga útil.
Outras dicas
Este obras que eu achar interessante, pelo menos...
public static class StrExtension
{
public static string twice(this string str) { return str + str; }
}
...
dynamic x = "Yo";
StrExtension.twice(x);
Ainda, se o compilador pode encontrar o correto método de extensão em tempo de compilação, então, eu não vejo por que ele não pode empacotar um conjunto de métodos de extensão a ser pesquisado em tempo de execução?Seria como um v-mesa para não-membro métodos.
EDITAR:
Isso é legal... http://www2.research.att.com/~bs/multimethods.pdf
Não pode funcionar, os métodos de extensão funcionam, dependendo de ter o espaço para nome incluído no arquivo e, até onde eu sei, o MSIL não tem idéia sobre arquivos e incluindo namespaces.
Você pode criar um método de extensão para objeto e atribui -lo a um dinâmico:
public static void MyExt(this object o) {
dynamic d = o;
d.myProp = "foo";
}
e chame assim:
ClassWithMyProp x;
x.MyExt();