Как назвать исходные файлы C# для универсальных классов

Я пытаюсь придерживаться общих соглашений о присвоении имен, таких как описанные в Руководстве по проектированию для Разработки Библиотек классов. Я поместил каждый тип в его собственный исходный файл (и частичные классы будут разделены через несколько файлов как описанные рассматриваемые Соглашения о присвоении имен для Частичных Файлов Класса), с помощью названия типа как имя файла.

Примеры:

namespace Demo.Bla                         //  project
{
    enum FlowDirection { }                 //  in file FlowDirection.cs
    class LayoutManager { }                //  in file LayoutManager.cs
}

namespace Demo.Bla.LayoutControllers       //  folder LayoutControllers in project
{
    class StackPanelLayoutController { }   //  in file LayoutControllers/StackPanelLayoutController
}

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

namespace Demo.Bla.Collections             //  folder Collections
{
    class Map { }                       //  in file Map.cs (obviously)
    class Bag { }                          //  in file Bag.cs (obviously)
    class Bag : Bag { }                 //  also in file Bag.cs ???
}

Если я поместил код и недженерика и дженерика Bag классы в то же Bag.cs файл? Каковы Ваши привычки?

38
задан Community 23 May 2017 в 12:16
поделиться

4 ответа

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

Одним из альтернативных вариантов было бы разделить их на разные файлы, сделать один файл "основным", а остальные "зависят" от него в файле сборки, как в случае с вопросом о частичном классе, на который вы ссылались в вопросе.

Таким образом, в итоге вы получите визуальную связь в Visual Studio, но все же по одному классу на файл, чтобы было проще с ними работать.

5
ответ дан 27 November 2019 в 03:40
поделиться

Я думаю, что обычным решением этой проблемы является присвоение файлу такого имени:

{ClassName}`{NumberOfGenericParameters}

Это даст вам это имя файла:

Bag.cs and Bag`1.cs

Таким образом Microsoft решает эту проблему в таких фреймворках, как Asp.net Mvc.

40
ответ дан 27 November 2019 в 03:40
поделиться

Я видел некоторые библиотеки, использующие

Bag.cs
Bag`1.cs
Bag`2.cs

, так как это то, что будет отображаться Type.Name.

Я хочу быть более описательным с параметрами типа, поэтому в последнее время я склонен использовать

Bag.cs
Bag{T}.cs
Bag{TKey, TValue}.cs

Это формат, который также поддерживается XML-комментариями.

/// <summary>
/// ...
/// Uses the <see cref="T:MyLibrary.Bag{TKey, TValue}" /> class.
/// </summary>
17
ответ дан 27 November 2019 в 03:40
поделиться

Я добавляю суффикс «T» к именам моих общих классов.

class Bag { }                           // in file Bag.cs 
class BagT<T> : Bag { }                 // in file BagT.cs
class BagInputs : BagT<Input>           // in file BagInputs.cs

Вы спросили:

Следует ли мне поместить код неуниверсального и универсального классов Bag в один и тот же файл Bag.cs? Каковы ваши привычки?

Приведенное выше мое соглашение нестандартно; Я должен пояснить, что я отвечал «каковы мои привычки», а не обязательно «что вам следует делать».

0
ответ дан 27 November 2019 в 03:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: