Created
May 29, 2014 09:06
-
-
Save ionoy/68b3d753dda813d9dfad to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Начали писать серию статей по 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