tipos sabias que personas para niños mundo medicas los las juegos importancia humano ejemplos dinamicas despertar datos curiosos curiosidades curiosidad cuerpo crear cortos como aprendizaje animales adolescentes .net cil

.net - sabias - La curiosidad del método let_ property.



la curiosidad en el aprendizaje pdf (2)

Es una cosa de COM que aparece en VB. Set asigna una referencia para reemplazar el elemento referido de una propiedad, mientras Let se espera que Let copie el contenido del operando en la propiedad existente. (Véase también la propiedad obtener ).

IIRC esto no es una cosa central de COM, más algo que se usa cuando un lenguaje no tiene suficiente poder expresivo para tratar los problemas de valor frente a referencia en un grado suficientemente preciso. Creo que solo se puede aplicar cuando se utiliza IDispatch (donde Estamos dirigiéndonos por ID de propiedad en lugar de por un método) en lugar de una interfaz personalizada (donde siempre tienes que resolver un método y llamar a eso). Estoy bastante seguro de que VB.NET (u otros lenguajes .NET) no aparecen en la superficie y, por lo tanto, son algo raro.

Essential COM by Box no lo menciona (solo propget y propput para get y set). COM IDL y el diseño de interfaz del Dr. Al Major lo mencionan en P106 y dice:

dispinterface DMyInterface { methods: ... [id(3), propputref] void lMyProp([in] IDispatch *pDisp); }

El atributo propputref es una pequeña cosa extraña que tiene sus orígenes en las idiosinracias de la sintaxis de Visual Basic. Considera lo siguiente:

Dim val as DMyOtherInterface Dim var as DMyInterface Set var.lMyProp = val var.lMyProp = val

Las dos asignaciones son permisibles pero significan cosas completamente diferentes. El uso de la palabra clave Set en la primera asignación indica que a lMyProp se le está asignando una interfaz [...]. La segunda asignación es una simpe, donde el valor del objeto val , que es el valor del miembro predeterminado de la interfaz DMyOtherInterface (el miembro predeterminado es el miembro etiquetado por el ID DISPID_VALUE , como se explicará en breve) asignado a la propiedad lMyProp de la interfaz DMyInterface .

La primera asignación se lleva a cabo utilizando el método propputref asociado con la propiedad lMyProp, mientras que la segunda asignación utiliza el método propputref. Para que esto funcione, se deben definir los métodos propputref y propput. Si estás confundido por esta forma de hacer las cosas, no estás solo. Si bien VB tiene muchas características buenas que han cambiado fundamentalmente la naturaleza de la programación, la definición del lenguaje fue predominantemente impulsada por el mercado en lugar de ser diseñada, y algunas veces se muestra .

Es gracioso que nunca haya usado el libro Major desde que lo leí a principios de 2000 antes de que COM y .COM se derrumbaran (aunque es un buen libro para su propósito). Gracias por el viaje al pasado: me encanta la forma en que la gente nos dice que la programación sigue siendo más difícil.

No lleves el libro de Lidin conmigo para ver si menciona otro. Pero estoy seguro de que sí (BTW, muchas gracias por Mono.Cecil)

Todos los desarrolladores de .net conocen el concepto de propiedades. Un 99,99% aproximadamente, es solo una pieza de metadatos que encola dos métodos, un captador y un configurador.

Lo mismo suele ocurrir con los eventos, con su método de agregar, eliminar e invocar.

La ECMA-335 describe un tipo de método semántico «Otro», que se aplicaría a una propiedad o un evento. Conceptualmente, una propiedad o un evento podría tener un número múltiple de «otros» métodos.

Hoy es el primer día que me topé con una propiedad con un método «otro». Y, por supuesto, tenía que estar relacionado con COM. La interfaz EnvDTE.Property, en el conjunto EnvDTE (utilizado para escribir complementos en Visual Studio), contiene una propiedad definida de la siguiente manera:

.property object Value() { .custom instance void [mscorlib]System.Runtime.InteropServices.DispIdAttribute::.ctor(int32) = ( 01 00 00 00 00 00 00 00 ) .get instance object EnvDTE.Property::get_Value() .other instance void EnvDTE.Property::let_Value(object) .set instance void EnvDTE.Property::set_Value(object) }

Con let_Value se define como:

.method public hidebysig newslot specialname abstract virtual instance void let_Value([in] object marshal( struct) lppvReturn) runtime managed internalcall { .custom instance void [mscorlib]System.Runtime.InteropServices.DispIdAttribute::.ctor(int32) = ( 01 00 00 00 00 00 00 00 ) }

Aparentemente, VBScript y las versiones de VB anteriores a VB.NET pueden definir propiedades utilizando la palabra clave Let. Y el Let tiene una misma firma que el Set. Siento que hay una relación aquí.

Pero, ¿alguien sabe cómo se ha declarado esta propiedad en el idioma con el que se ha escrito EnvDTE? ¿Cómo podría crear un ensamblaje con el mismo patrón (sin usar ilasm, eso sería demasiado fácil)? ¿Y alguien se ha enfrentado a una propiedad similar?

¿Y alguien ha visto otras «otras» propiedades, tal vez con una semántica diferente a esta? Y si es así, ¿a qué están acostumbrados?


La automatización de Visual Studio se basa en COM. La propiedad en cuestión probablemente se ha generado a través de una herramienta para admitir interoperabilidad COM (potencial tlbimp ). Dudo que alguien haya codificado esto en un lenguaje real basado en .Net.