Mi az a „strukturális gépelés Interfaces” géppel

szavazat
17

Az ő blogbejegyzést kb géppel, Mark Rendle azt mondja, hogy az egyik dolog, amit szeret róla:

„A strukturális gépelés interfészeket. Nagyon szeretnék C # tehetett, hogy”

Mit értett ez alatt?

A kérdést 04/10/2012 06:08
a forrás felhasználó
Más nyelveken...                            


2 válasz

szavazat
18

Alapvetően azt jelenti, hogy a felületek összehasonlítjuk a „kacsa gépelés” alapon, és nem olyan típusú személyazonosító alapon.

Tekintsük a következő C # kód:

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

És az azzal egyenértékű géppel kód:

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

A spec nem terjed ki ez a sok részlet, de osztályok „márka”, ami azt jelenti, hogy ugyanazt a kódot, írott osztályok helyett felületek, akkor van egy hiba. C # interfészek megvan márkák, és így nem lehet implicit alakítjuk.

A legegyszerűbb módja annak, hogy úgy gondolja, hogy az, hogy ha megpróbálja a konverzió interfész X interfész Y, ha X minden tagja Y, az átalakítás sikeres, annak ellenére, hogy X és Y nem lehet ugyanaz a neve.

Válaszolt 04/10/2012 06:29
a forrás felhasználó

szavazat
1

Gondol róla.

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

Mi lenne, ha azt mondta:

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

Géppel lehetővé teszi ezt, a C # nem.

Ahogy géppel célja, hogy jól működik a DOM, amely „laza” gépelés, ez az egyetlen értelmes választani géppel.

Bízom fel az olvasónak, hogy eldöntse, hogy tetszik a „strukturális gépelés” ... ..

Válaszolt 12/02/2014 16:40
a forrás felhasználó

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