visual versión usa tutorial studio referencia que property parameter net msb3644 maquina los framework español error ensamblados encuentran encontraron componentes caracteristicas c# .net c#-4.0 dynamic-typing multiple-dispatch

c# - versión - ¿El nuevo tipo de variable "dinámica" en.NET 4.0 resuelve el problema de envío de método único/múltiple en CLR?



que framework usa visual studio 2017 (2)

Sí, la escritura dinámica permite despachos múltiples, y no, no tiene que crear su propio objeto dinámico para hacerlo.

Supongamos que queremos implementar Enumerable.Count() nosotros mismos, y no queremos una carga de pruebas " if (source is IList) " en nuestro código. Podríamos escribirlo así:

public static class Enumerable { public static int Count<T>(this IEnumerable<T> source) { dynamic d = source; return CountImpl(d); } private static int CountImpl<T>(ICollection<T> collection) { return collection.Count; } private static int CountImpl(ICollection collection) { return collection.Count; } private static int CountImpl<T>(string text) { return text.Length; } private static int CountImpl<T>(IEnumerable<T> source) { // Fallback int count = 0; foreach (T t in source) { count++; } return count; } }

No digo que sería una buena idea, pero así es como funcionaría :)

Tenga en cuenta que debe tener cuidado de no introducir situaciones en las que podría terminar con una llamada ambigua para algunos tipos. Esto no sería un problema al usar clases para parámetros, pero considera que una sola clase puede implementar múltiples interfaces.

El problema del envío único es más familiar para las personas que se dedican a la codificación con lenguajes tipados estáticos como Java y C #. La idea básica es:

Mientras que el polimorfismo de tiempo de ejecución nos permite enviar a la llamada al método correcto según el tipo (tipo de tiempo de ejecución) del receiver , por ejemplo:

IAnimal mything = new Cat(); mything.chop();

La llamada al método se realizará según el tipo de tiempo de ejecución de mything , a saber, Cat . Esta es la capacidad de envío único (que está presente en Java / C #).

Ahora, si necesita despachar no solo en el tipo de receptor de tiempo de ejecución, sino también en los tipos de argumentos (múltiples), enfrenta un pequeño problema:

public class MyAcceptor { public void accept (IVisitor vst) {...} public void accept (EnhancedConcreteVisitor vst) {...} }

El segundo método nunca se llama, porque en nuestro código de "consumidor" solo tratamos diferentes tipos de objetos (visitantes en mi ejemplo) por su supertipo común o interfaz.

Es por eso que pregunto, porque el tipado dinámico permite el polimorfismo de despacho múltiple y C # 4.0 tiene esa palabra clave dinámica;)