Подтвердить что ты не робот

Что я должен называть моими файлами определениями общего класса?

Я пишу пару классов, у которых есть общие аргументы типа, но мне нужно перегружать классы, потому что мне нужно другое количество аргументов в разных сценариях. В принципе, у меня

 public class MyGenericClass<T> { ... }
 public class MyGenericClass<T, K> { ... }
 public class MyGenericClass<T, K, L> { ... }
 // it could go on forever, but it won't...

Я хочу, чтобы все они были в одном пространстве имен, но в одном исходном файле для каждого класса. Что я должен назвать файлами? Есть ли наилучшая практика?

4b9b3361

Ответ 1

Я видел, как люди использовали

MyGenericClass`1, MyGenericClass`2 or MyGenericClass`3

(число - это число общих параметров).

Я думаю, что вы получаете как TypeName при вызове .ToString в классе.

Ответ 2

Когда возникает такая ситуация, я принимаю ту же конвенцию, которая используется в комментариях документации XML для общих файлов С#, которая заключается в использовании { и } вместо < и >, поскольку угловые скобки не являются дружественные в XML или именах файлов, но кудрявые. Так что-то вроде:

МойКласс {T}.cs

МойКласс {T, K}.cs

Если у вас действительно очень много параметров, это может быть несколько громоздким, как схема именования, поэтому я бы предпочел принять соглашение CLR обратного хода, за которым следует количество параметров, например

MyClass`1.cs

MyClass`2.cs

Или смешивайте и сопоставляйте две схемы в соответствии с ситуацией.

Ответ 3

Я думаю, вы не найдете много догмы в сообществе С#, отдавая предпочтение отдельным файлам для каждого варианта универсального класса с тем же именем; Я предпочитаю использовать его только для случая, который вы описываете, хотя я мог видеть случай, что вы предлагаете, если код обязательно сложный/длинный для каждого варианта. Обычно я просто использую имя рассматриваемого класса как имя файла.

Если бы я собирался разделить варианты на отдельные файлы, я мог бы увидеть использование решения Майкла, хотя это было бы немного больно для тех из нас, кто использует инструменты стиля Unix в командной строке, например, в Cygwin или AndLinux. Я бы, вероятно, использовал знак подчеркивания или никаких знаков препинания. Или что-то вроде 1P, 2P, 3P в качестве суффикса.

Ответ 4

Я бы поместил их все в один и тот же файл, если они не являются большими (обычно их не будет, кроме тех, у кого больше Ts).

На самом деле нет лучшей практики для именования классов, кроме того, что вы найдете в руководящих принципах .NET Framework, поскольку это часть творческой стороны программирования, и, к сожалению, SSCLI возвращается только к 2.0, поэтому вы не можете найти там очень помогает.

Ответ 5

Обычно я использую Classname.1.cs, Classname.2.cs и т.д.... где число - это число общих аргументов, аналогичное "ICollection and ICollection` в notation used in the framework documentation (and in XML documentation in your sourcecode). Sometimes you also have a class with no generic arguments (similar to) в структуре), и filename будет просто именем класса, как и ожидалось. В отличие от использования backtick, это имеет то преимущество, что у вас не будет никаких недопустимых символов в имени файла. Не все файловые системы, системы управления версиями, операционные системы позволяют использовать обратный шаблон в имени.