Ответ 1
Я видел, как люди использовали
MyGenericClass`1, MyGenericClass`2 or MyGenericClass`3
(число - это число общих параметров).
Я думаю, что вы получаете как TypeName при вызове .ToString в классе.
Я пишу пару классов, у которых есть общие аргументы типа, но мне нужно перегружать классы, потому что мне нужно другое количество аргументов в разных сценариях. В принципе, у меня
public class MyGenericClass<T> { ... }
public class MyGenericClass<T, K> { ... }
public class MyGenericClass<T, K, L> { ... }
// it could go on forever, but it won't...
Я хочу, чтобы все они были в одном пространстве имен, но в одном исходном файле для каждого класса. Что я должен назвать файлами? Есть ли наилучшая практика?
Я видел, как люди использовали
MyGenericClass`1, MyGenericClass`2 or MyGenericClass`3
(число - это число общих параметров).
Я думаю, что вы получаете как TypeName при вызове .ToString в классе.
Когда возникает такая ситуация, я принимаю ту же конвенцию, которая используется в комментариях документации XML для общих файлов С#, которая заключается в использовании {
и }
вместо <
и >
, поскольку угловые скобки не являются дружественные в XML или именах файлов, но кудрявые. Так что-то вроде:
МойКласс {T}.cs
МойКласс {T, K}.cs
Если у вас действительно очень много параметров, это может быть несколько громоздким, как схема именования, поэтому я бы предпочел принять соглашение CLR обратного хода, за которым следует количество параметров, например
MyClass`1.cs
MyClass`2.cs
Или смешивайте и сопоставляйте две схемы в соответствии с ситуацией.
Я думаю, вы не найдете много догмы в сообществе С#, отдавая предпочтение отдельным файлам для каждого варианта универсального класса с тем же именем; Я предпочитаю использовать его только для случая, который вы описываете, хотя я мог видеть случай, что вы предлагаете, если код обязательно сложный/длинный для каждого варианта. Обычно я просто использую имя рассматриваемого класса как имя файла.
Если бы я собирался разделить варианты на отдельные файлы, я мог бы увидеть использование решения Майкла, хотя это было бы немного больно для тех из нас, кто использует инструменты стиля Unix в командной строке, например, в Cygwin или AndLinux. Я бы, вероятно, использовал знак подчеркивания или никаких знаков препинания. Или что-то вроде 1P, 2P, 3P в качестве суффикса.
Я бы поместил их все в один и тот же файл, если они не являются большими (обычно их не будет, кроме тех, у кого больше Ts).
На самом деле нет лучшей практики для именования классов, кроме того, что вы найдете в руководящих принципах .NET Framework, поскольку это часть творческой стороны программирования, и, к сожалению, SSCLI возвращается только к 2.0, поэтому вы не можете найти там очень помогает.
Обычно я использую 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, это имеет то преимущество, что у вас не будет никаких недопустимых символов в имени файла. Не все файловые системы, системы управления версиями, операционные системы позволяют использовать обратный шаблон в имени.