Co to jest „Structural Wpisanie do interfejsów” w maszynopisie

głosy
17

W swoim blogu o maszynopis, Mark Rendle mówi, że jedną z rzeczy, lubi o to:

„Wpisując strukturalne dla interfejsów. Naprawdę chciałbym C # może zrobić, że”

Co miał na myśli?

Utwórz 04/10/2012 o 06:08
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
18

Zasadniczo oznacza to, że interfejsy są porównywane na „kaczka wpisując” zasadach, a nie na zasadzie rodzaj tożsamości.

Rozważmy następujący kod 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

I równowartość kod maszynopis:

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

Spec nie obejmuje to na wiele szczegółów, ale zajęcia mają „marki”, co oznacza ten sam kod, napisany z klas zamiast interfejsów, by mieć błąd. C # interfejsy mają marki, a tym samym nie można niejawnie konwertowane.

Najprostszym sposobem, aby myśleć o tym, że jeśli próbujesz konwersję z interfejsu X do interfejsu Y, jeżeli X ma wszystkich członków Y, konwersja powiedzie, chociaż X i Y nie może mieć te same nazwy.

Odpowiedział 04/10/2012 o 06:29
źródło użytkownik

głosy
1

Myśleć o.

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

Co zrobić, jeśli mamy powiedział:

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

Maszynopis pozwoli to, C # nie będzie.

Jak ma maszynopis do pracy z DOM, który używa „luźne” pisanie, że jest to jedyny rozsądny wybór dla maszynopisu.

Zostawiam ją do czytnika, aby zdecydować, czy podoba im pisanie „strukturalne” ... ..

Odpowiedział 12/02/2014 o 16:40
źródło użytkownik

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