Форум программистов, компьютерный форум, киберфорум
Соколиный глаз
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  

Использование регионов

Запись от Соколиный глаз размещена 23.07.2018 в 14:29
Показов 752 Комментарии 2
Метки .net, c#

Это одна из попыток стандартизации кода. Не воспринимайте это как то, чему надо обязательно следовать.

Я не видел как другие использовали регионы (#region, #endregion) в C# также, но я приведу пример как это можно сделать. Сам использую их так, для структуризации кода.
Пусть есть 4 группы регионов:
1) PrivatecSection - здесь располагаются поля и методы с уровнем доступа private.
2) ProtectedSection - здесь располагаются поля и методы с уровнем доступа protected.
3) InternalSection - здесь располагаются поля и методы с уровнем доступа internal.
4) PublicSection - здесь располагаются поля и методы с уровнем доступа public.
И в каждой такой группе есть еще подгруппы регионов:
1) Fields - здесь располагаются поля класса.
2) Properties - здесь располагаются свойства класса.
3) Methods - здесь располагаются методы класса.
В каждой из этих подгрупп есть еще подгруппы:
1) Owner - эти поля/свойства/методы описываются в самом класса, они не являются реализацией некоторого интерфейса.
2) InterfaceImplementations.IName- эти поля/свойства/методы являются реализацией интерфейса IName.
Но, например, есть исключения:
1) В PublicSection отсутствует секция Fields, так как поля редко бывают публичными, чаще вместо них используют свойства.
2) В подсекции Methods в PublicSection нет секции Owner - вместо нее UserOperations (просто другое название).
Секции именуются также как и пространства имён, например: PublicSection.Properties.Owner. Секция создается только для 2-х и более элементов (под элементами имеются ввиду: секции, поля, свойства и методы), которые она включает.

Пример:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
using System;
 
namespace Examples.Collections.Generic
{
    //Очередь на основе односвязного линейного списка.
    public class Queue<T> : IPrintable
    {
        private Node<T> tail;
 
        #region PublicSection
        #region PublicSection.Properties.Owner
        public Node<T> Head { get; private set; }
        public int Count { get; private set; }
        #endregion PublicSection.Properties.Owner
 
        #region PublicSection.Methods
        #region PublicSection.Methods.InterfaceImplementations.IPrintable
        public void Print() => Console.Write(ToString());
 
        public void Println() => Console.WriteLine(ToString());
        #endregion PublicSection.Methods.InterfaceImplementations.IPrintable
 
        #region PublicSection.Methods.UserOperations
        public void Enqueue(T value)
        {
            Node<T> node = new Node<T>(value);
            if (Count == 0)
            {
                Head = node;
            }
            else
            {
                tail.Next = node;
            }
            tail = node;
            Count++;
        }
 
        public T Peek()
        {
            if (Count == 0)
            {
                throw new InvalidOperationException("Очередь пуста");
            }   
            return Head.Value;
        }
 
        public T Dequeue()
        {
            T result = Peek();
            Head = Head.Next;
            if (Count == 1)
            {
                tail = null;
            }
            Count--;
            return result;
        }
 
        public void Clear()
        {
            Head = null;
            tail = null;
            Count = 0;
        }
 
        public override string ToString() => $"Queue[{typeof(T).Name}]: " + Helper.ToString(Head);
        #endregion PublicSection.Methods.UserOperations
        #endregion PublicSection.Methods
        #endregion PublicSection
    }
}
То, что я так делаю - не значит, что все должны делать так. Просто мне удобно, чтобы я мог легко сворачивать и разворачивать нужные части кода.
Метки .net, c#
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 2
Комментарии
  1. Старый комментарий
    Аватар для Usaga
    Лично я в своей практике успел заметить, что необходимость применения регионов - показатель god-класса или просто портянки го*на.

    Т.е. в нормальном классе методов и полей и свойств не должно быть настолько много, что могут пригодиться регионы. Если вы работаете с унаследованным кодом, то ладно - не переписывать же всё. А если пишете с нуля, то никаких регионов быть не должно.
    Запись от Usaga размещена 24.07.2018 в 12:32 Usaga на форуме
  2. Старый комментарий
    Аватар для Соколиный глаз
    Спасибо, буду знать.
    Запись от Соколиный глаз размещена 24.07.2018 в 12:55 Соколиный глаз вне форума
 
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru