¿Qué es "Typing estructural para interfaces" a máquina de escribir

votos
17

En su entrada de blog sobre mecanografiado, Mark Rendle está diciendo, que una de las cosas que le gustan de ello es:

Tipificación estructural para las interfaces. Realmente deseo C # podría hacer eso

Que quiso decir con eso?

Publicado el 04/10/2012 a las 06:08
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
18

Básicamente, esto significa que las interfaces se comparan en una base "duck typing" en lugar de sobre una base tipo de identidad.

Considere el siguiente código C #:

interface X1 { string Name { get; } }
interface X2 { string Name { get; } }
// ... later
X1 a = null;
X2 b = a; // Compile error! X1 and X2 are not compatible

Y el código de mecanografiado equivalente:

interface X1 { name: string; }
interface X2 { name: string; }
var a: X1 = null;
var b: X2 = a; // OK: X1 and X2 have the same members, so they are compatible

La especificación no cubre esto en mucho detalle, pero las clases tienen "marcas", que significa el mismo código, escrito con clases en lugar de las interfaces, sería tener un error. C # tienen interfaces de marcas, y por lo tanto no se puede convertir implícitamente.

La manera más simple de pensar en ello es que si usted está tratando de una conversión de la interfaz para la interfaz X Y, si X tiene todos los miembros de Y, la conversión tiene éxito, a pesar de que X e Y no podría tener los mismos nombres.

Respondida el 04/10/2012 a las 06:29
fuente por usuario

votos
1

Pensar en.

class Employee { fire: = ..., otherMethod: = ...}
class Missile { fire: = ..., yetMoreMethod: = ...}
interface ICanFire { fire: = ...}
val e = new Employee
val m = new Missile
ICanFire bigGuy = if(util.Random.nextBoolean) e else m
bigGuy.fire

Lo que si decíamos:

interface IButtonEvent { fire: = ...}
interface IMouseButtonEvent { fire: = ...}
...

Mecanografiado permitirá esto, C # no lo hará.

Como mecanografiado tiene como objetivo trabajar bien con el DOM que utiliza al escribir “suelto”, es la única sensata para elegir mecanografiado.

Lo dejo al lector para decidir si les gusta “tipificación estructural” ... ..

Respondida el 12/02/2014 a las 16:40
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more