tutorial español curso aprender dynamic c#-4.0

dynamic - español - solidity ide



Palabra clave dinámica C#4: ¿por qué no? (8)

¿El verdadero escollo? Grave falta de documentación. Toda la arquitectura de la aplicación existe en la mente de la persona (o personas) que la escribió. Al menos con un tipado fuerte, puede ver lo que hace el objeto a través de su definición de clase. Con el tipado dinámico, debe inferir el significado de su uso, en el mejor de los casos. En el peor de los casos, no tiene IDEA cuál es el objeto. Es como programar todo en JavaScript. ¡ACK!

Después de leer muchas de las respuestas a este hilo , veo que muchos de los que no les gusta citan el potencial de abuso de la nueva palabra clave. Mi pregunta es, ¿qué tipo de abuso? ¿Cómo se puede abusar tanto de esto como para hacer que la gente no lo sienta con vehemencia? ¿Es solo sobre el purismo? ¿O hay una trampa real que no estoy viendo?


Creo que gran parte de la repugnancia que las personas están expresando a esta característica se reduce a "esta es una característica de lenguaje incorrecto porque permitirá a los malos desarrolladores escribir código incorrecto". Si lo piensas, según esa lógica, todas las características del lenguaje son malas.

Cuando me encuentro con un bloque de código VB que un genio ha puesto como prefijo On Error Resume Next , no es VB lo que maldigo. Quizás debería, supongo. Pero en mi experiencia, una persona que está decidida a poner un centavo en la caja de fusibles encontrará la manera. Incluso si vacías sus bolsillos, él va a crear sus propios centavos.

Yo, estoy esperando una forma más útil de interoperar entre C # y Python. Estoy escribiendo más y más código que hace esto. La palabra clave dynamic no puede venir lo suficientemente pronto para ese caso de uso particular, porque la forma actual de hacerlo me hace sentir como un académico soviético en la década de 1950 que está viajando hacia el oeste para una conferencia: hay una inmensa cantidad de reglas y el papeleo antes de irme, estoy seguro de que alguien me estará mirando todo el tiempo que estoy allí, y la mayor parte de lo que recojo mientras estoy allí me será quitado en la frontera cuando regrese .


Cuando las personas se dan cuenta de que no obtienen una buena IntelliSense con dynamic , pasarán de ser dynamic -feliz a dynamic -cuando sea necesario-y- var -en-todos-otros-tiempos.

Los propósitos de dynamic incluyen: interoperabilidad con lenguajes dinámicos y plataformas como COM / C ++ y DLR / IronPython / IronRuby; además de convertir el C # en IronSmalltalkWithBraces con todo lo que implementa IDynamicObject .

Los buenos tiempos serán tenidos por todos. (A menos que necesite mantener el código, alguien más escribió).


No veo una razón por la cual la forma actual de invocar métodos dinámicamente es defectuosa:

Se necesitan tres líneas para hacerlo, o puede agregar un método de extensión en System.Object para hacerlo por usted:

class Program { static void Main(string[] args) { var foo = new Foo(); Console.WriteLine(foo.Invoke("Hello","Jonathan")); } } static class DynamicDispatchHelper { static public object Invoke(this object ot, string methodName, params object[] args) { var t = ot.GetType(); var m = t.GetMethod(methodName); return m.Invoke(ot, args); } } class Foo { public string Hello(string name) { return ("Hello World, " + name); } }


Esto es como hablar de cámaras públicas, seguro de que pueden y serán mal utilizadas, pero también hay beneficios de tenerlas.

No hay ninguna razón por la que no se pueda prohibir la palabra clave "dinámica" en su propia guía de codificación si no las necesita. ¿Entonces, cuál es el problema? Quiero decir, si quieres hacer cosas locas con la palabra clave "dinámica" y pretender que C # es el primo mutante de JavaScript, sé mi invitado. Solo mantén estos experimentos fuera de mi base de código. ;)


FUD. Puede ser lo mejor desde el pan en rebanadas, pero toda la experiencia que he tenido con VB, JavaScript, etc., me da escalofríos al saber que C # tendrá unión dinámica. Sé que podré verlo racionalmente en el futuro cercano y ver qué tan buena será esa nueva característica para permitir la interoperabilidad con lenguajes dinámicos. Pero llevará algo de tiempo. Soy humano, ¿está bien? :-)


La dinámica es mala porque un código como este aparecerá por todos lados:

public dynamic Foo(dynamic other) { dynamic clone = other.Clone(); clone.AssignData(this.Data); return clone ; }

en lugar de:

public T Foo<T>(T other) where T: ICloneable, IAssignData{ T clone = (T)other.Clone(); clone.AssignData(this.Data); return clone; }

El primero, no tiene información de tipo estático, no comprueba en tiempo de compilación, no es de auto documentación, no hay inferencia de tipo, por lo que las personas se verán obligadas a usar una referencia dinámica en el sitio de llamadas para almacenar el resultado, lo que generará más pérdida de tipo y todo esto se reduce en espiral

Ya estoy empezando a temer a la dinámica .

Editar : El peligro ha pasado (¡uf!) ... y la dinámica no se ha abusado después de todo, no es necesario que me voten después de 3 años :)


Algunos lo ven como una herramienta que se abusará. Como "Option Strict Off" y "On Error Resume Next" en VB, que los lenguajes "puros" como C # y Java nunca tuvieron.

Muchos dijeron lo mismo sobre la palabra clave "var", pero no veo que se abuse de ella, una vez que se entendió que no era lo mismo que la "Variante" de VB.

Se podría abusar de ellos en lugares donde los desarrolladores perezosos no quieren verificar los tipos de clases y simplemente intente atrapar llamadas dinámicas en lugar de escribir "si blah es Blah ...".

Personalmente, creo que podría usarse correctamente en situaciones como esta reciente pregunta que respondí.

Creo que los que realmente entienden su poder son aquellos que están fuertemente inmersos en los lenguajes .NET dinámicos.