Способы применения директив #region и #endregion в C#

303
21 октября 2017, 15:23

Я вот прочитал про #region и #endregion что они нужны для группировки членов классов, но более подробно не нашел. Хочу понять более подробно.

Answer 1

Директива #region позволяет указать блок кода, который можно разворачивать и сворачивать с помощью функции структурирования в редакторе кода Visual Studio. В больших файлах кода очень удобно сворачивать или скрывать одну или несколько областей, чтобы не отвлекать внимание от той части файла, над которой в настоящее время идет работа.

Пример

#region MyClass definition  
public class MyClass   
{  
    static void Main()   
    {  
    }  
}  
#endregion  

Источник

Answer 2

Представьте, что у вас есть класс, который наследует несколько интерфейсов.

Вы реализуете все необходимые методы, при этом группируете их при помощи регионов.

Вот это, пожалуй, самый типовой кейс, который подразумевается, когда говорят о группировке при помощи регионов.

Второй типовой пример -- сокрытие в регионах вложенных классов.

public class MyClass : IFoo, IBar
{
    # region [ IFoo implementation ]
    public void Foo1()
    {
        throw new System.NotImplementedException();
    }
    public void Foo2()
    {
        throw new System.NotImplementedException();
    }
    public void Foo3()
    {
        throw new System.NotImplementedException();
    }
    #endregion
    #region [ IBar implementation]
    public int Bar1()
    {
        throw new System.NotImplementedException();
    }
    public string Bar2()
    {
        throw new System.NotImplementedException();
    }
    #endregion
}
public interface IFoo
{
    void Foo1();
    void Foo2();
    void Foo3();
}

public interface IBar
{
    int Bar1();
    string Bar2();
}
Answer 3

Я часто использую #region, чтобы спрятать большие куски boilerplate-кода. Хороший пример — реализация dependency property в WPF. Такое множество кода:

#region dependency property FieldValue Value
public FieldValue Value
{
    get { return (FieldValue)GetValue(ValueProperty); }
    set { SetValue(ValueProperty, value); }
}
public static readonly DependencyProperty ValueProperty =
    DependencyProperty.Register("Value", typeof(FieldValue), typeof(SingleField));
#endregion

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

[dependency property FieldValue Value]
READ ALSO
Разбить “класс-бог”

Разбить “класс-бог”

В моём проекте есть сервис WCF, есть интерфейс описывающий ServiceContract (IMainHost), и есть класс на основе этого интерфейса (MainHost)И всё отлично работает

224
Пост на странице пользователя через VK API (JavaScript)

Пост на странице пользователя через VK API (JavaScript)

Как опубликовать пост c картинкой из внешнего ресурса через ВК API (JS)? Как правильно прописать параметр attachments что-бы прикрепилась картинка...

242
Как создать поле класса в JavaScript [дубликат]

Как создать поле класса в JavaScript [дубликат]

На данный вопрос уже ответили:

326