2010-03-12 3 views

ответ

9

Это несколько вводит в заблуждение, поскольку интерфейс по определению не обеспечивает реализацию.

Однако многие части фреймворка пытаются облегчить жизнь - поэтому они обеспечивают метод, который принимает интерфейс, но также обеспечивает перегрузку без параметров. Хорошим примером является List<T>.Sort.

В документации здесь указывается, что если вы используете метод, который обычно требует IComparer<T>, но используйте его через некоторую перегрузку, которая этого не делает, вместо этого вы получите ссылочную «реализацию по умолчанию».

Однако это действительно «деталь реализации» классов, не связанных с самим интерфейсом. Я лично считаю, что это плохой выбор слов в документации, а также должно быть что-то подобное:

Многие типы в рамках полагаются на общей реализации этого интерфейса, предоставляемого Comparer класса.

Это, на мой взгляд, обеспечить более четкое значение для этого ...

+1

мне очень нравятся такие объяснения! =) –

+1

@Will: Спасибо! Я делаю все возможное;) –

+0

Добавить что-нибудь. Иногда в структуре используется шаблон специальных случаев (или шаблон Null Object), и реализация шаблона по умолчанию может быть частью шаблона. :) –

3

Это означает, что когда вы вызываете метод Sort без аргумента (без явного указания компаратора), он будет использовать эту реализацию по умолчанию.

0

Это означает, что этот класс реализует интерфейс. Он указывает на объект, который реализует сам интерфейс без каких-либо производных или унаследованных элементов, но явно интерфейс. Это класс, который прямо соответствует этому интерфейсу.

public interface IComparer { 
    // Some members to implement here. 
} 

public class Comparer : IComparer { 
    // IComparer members implementation 
} 
Смежные вопросы