Соглашение для универсальных и неуниверсальных типов с одинаковыми именами

Task - это пример класса, который существует в универсальной и неуниверсальной форме. Общая форма расширяет неуниверсальную форму.

public class Task
{

}

public class Task<T> : Task
{

}

Скажем, я сам реализовал нечто подобное. Обычно принято помещать разные классы в разные файлы. Поскольку у них одно и то же имя, здесь это невозможно.

Каковы правила такого сценария? Сохранить оба класса в одном файле или поместить общий класс в другой файл, но с другим именем?


person Gigi    schedule 26.12.2015    source источник
comment
FWIW, вот похожий вопрос: stackoverflow.com/questions/3108189/   -  person IronGeek    schedule 26.12.2015
comment
Обычно я помещаю оба класса в один файл. Причина в том, что один из них в конечном итоге становится оболочкой другого и, следовательно, имеет минимальный код.   -  person Eris    schedule 26.12.2015


Ответы (2)


Хотя Microsoft не публикует стандартный способ решения этой ситуации, они помещают Task<TResult> в другой файл с именем, не связанным с Task: неуниверсальный класс находится в файле _ 3_, а общий находится в файле _ 4_.

Точно так же Expression и Expression<TResult> находятся в разных файлах (Expression.cs и LambdaExpression.cs).

Похоже, что логика размещения классов в файлах заключается в том, что класс соответствует другим классам, которым он логически принадлежит.

person Sergey Kalinichenko    schedule 26.12.2015

Соглашение, которое я принял (и впоследствии поощряемое на моем рабочем месте), заключается в добавлении общих параметров к имени файла. Так, например, у нас будет Task.cs для необщей версии и Task(T).cs для общей версии. Причина этого во многом связана с тем, что мы очень строго следим за соблюдением правила «один класс для каждого файла».

person Kyle    schedule 26.12.2015
comment
Итак, если у вас есть только общая версия, вы все равно называете ее Task(T).cs? - person Gigi; 26.12.2015
comment
@Gigi В общем, нет, хотя, наверное, было бы больше смысла, если бы мы это сделали. Прямо сейчас правило вступает в игру только для устранения неоднозначности общих и неуниверсальных классов с одним и тем же именем. - person Kyle; 27.12.2015
comment
По правде говоря, работать таким образом кажется немного непоследовательным. - person Gigi; 27.12.2015