Skip to content

Instantly share code, notes, and snippets.

@ionoy
Created May 29, 2014 09:06
Show Gist options
  • Save ionoy/68b3d753dda813d9dfad to your computer and use it in GitHub Desktop.
Save ionoy/68b3d753dda813d9dfad to your computer and use it in GitHub Desktop.
Начали писать серию статей по NemerleWeb, и там понадобился макрос, который сделал бы объявление типов более лаконичными.
На данный момент первый пример — это классический todo список. Для такого списка неплохо было бы создать тип:
public class Task
{
public Name : string { get; set; }
public Priority : string { get; set; }
public IsDone : bool { get; set; }
}
Так как тип хотелось бы уместить внутри Unit (класс с логикой и разметкой), то получается чересчур многословно. Опять же вспоминаем одну из целей проекта — "максимальная лаконичность".
Предложение:
[Dto] class Task { Name : string; Priority : string; IsDone : bool }
По умолчанию Dto конвертирует эти поля в свойства и добавляет модификатор public. Так же создаётся конструктор, инициализирующий все поля (упрощённый вариант [Record])
Возможные опции:
[Dto(fields)] — поля остаются полями, но они мутабельные
[Dto(fields, immutable)] — поля остаются иммутабельными
[Dto(immutable)] — свойства, иммутабельные (private set)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment