Небольшое объяснение интерфейса vb.net - PullRequest
1 голос
/ 26 августа 2010

Может кто-нибудь объяснить (из T) компонент для этого интерфейса? Я достаточно знаком с тем, как работают интерфейсы. Я также понимаю, что T относится к типу ... Что происходит с частью Out.

Public Interface IPageOfItems(Of  Out T)
Inherits IEnumerable(Of T)
        Property PageNumber() As Integer
        Property PageSize() As Integer
        Property TotalItemCount() As Integer
        ReadOnly Property TotalPageCount() As Integer
        ReadOnly Property StartPosition() As Integer
        ReadOnly Property EndPosition() As Integer
    End Interface

Ответы [ 3 ]

1 голос
/ 26 августа 2010

.NET 4.0 представил ковариацию и контравариантность универсальных типов . Вот что это значит.

ковариации

Ключевое слово Out здесь указывает, что типом является ковариант . Ковариантный тип T(Of D) может быть приведен к типу T(Of B), где D выводится из B. Это возможно, когда тип T(Of D) когда-либо использует только значения D в качестве выходных данных (отсюда и слово Из ).

Например, интерфейс IEnumerable(Of Out T) является ковариантным, поскольку ни один из его методов не принимает параметры типа T. Следовательно, IEnumerable(Of String) может быть приведен как IEnumerable(Of Object) - если он обеспечивает перечислимый доступ к строкам, то он обеспечивает перечислимый доступ к объектам (поскольку строки являются объектами).

контрвариация

И наоборот, ключевое слово In может применяться к типу, который имеет право на Контравариантность . Контравариантный тип T(Of B) может быть приведен к типу T(Of D), где D выводится из B. Это возможно, когда тип T(Of B) использует только значения B в качестве input (отсюда и слово In ). Другими словами, контравариантность является полной противоположностью ковариации.

Хороший пример контравариантного типа - интерфейс IComparer(Of In T). Этот интерфейс не предоставляет методов, которые возвращают значения T; следовательно, IComparer(Of Object) может быть приведен как IComparer(Of String) - в конце концов, если он может сравнивать объекты, он может сравнивать строки.

0 голосов
/ 26 августа 2010

Это новая функция .NET 4, которая позволяет указывать дисперсию с помощью общих аргументов.Практически все, что вам нужно знать:

http://msdn.microsoft.com/en-us/library/dd799517.aspx

0 голосов
/ 26 августа 2010

Это означает, что интерфейс является ковариантным в универсальном параметре T. Проверьте заголовок Generic Variance в этой статье , которая объясняет новые функции в VB.NET 2010 (.NET Fx 4.0).

В короткой ковариации позволит заменить меньший тип (например, подкласс) вместо более крупного типа. Например, если Tiger наследуется от Animal, то мы можем использовать IEnumerable (Of Tiger) вместо IEnumerable (Of Animal). Эрик Липперт очень хорошо объяснил дисперсию (в контексте C #) в серии сообщений в блоге .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...