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.

Foi útil?

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();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top