Что такое «Структурная Typing для интерфейсов» в машинописном

голоса
17

В своем блоге о машинописи, Марк Rendle говорит, что одна из вещей , которые он любит о нем:

«Структурно типирование для интерфейсов. Я действительно хочу C # может сделать это»

Что он имел в виду под этим?

Задан 04/10/2012 в 06:08
источник пользователем
На других языках...                            


2 ответов

голоса
18

В основном, это означает, что интерфейсы сравниваются на «утку набрав» основе, а не на идентичности типа основе.

Рассмотрим следующий 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

И эквивалентный код Машинопись:

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

В спецификации не покрывает это очень подробно, но классы «бренды» , что означает один и тот же код, написанный с классами вместо интерфейсов, будет иметь ошибку. # Интерфейсов C есть бренды, и , таким образом , не могут быть неявно преобразованы.

Самый простой способ думать об этом, что если вы пытаетесь преобразование из интерфейса X интерфейс Y, если X имеет все члены Y, преобразование завершается успешно, даже если X и Y не могут иметь одинаковые имена.

Ответил 04/10/2012 в 06:29
источник пользователем

голоса
1

Думать о.

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

Что если бы мы сказали:

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

Машинопись допустит, C # не будет.

Как машинопись стремится хорошо работать с DOM, которая использует «свободный» ввод с клавиатуры, это единственный разумный выбор для машинописи.

Я оставляю это до читателя, чтобы решить, если им нравится «Structural печатать» ... ..

Ответил 12/02/2014 в 16:40
источник пользователем

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