Требуется сгенерировать статический метод, который возвращает объект типа, с которым работает макрос. Вопрос: как это лучше сделать. Вот код на котором я остановился (здесь выполняется десериализация полей из BinaryReader):
internal СоздатьМетодДесериализации(
поля : list[IField],
атрибуты : NemerleAttributes,
конструктор : IMethod
) : ClassMember
{
def проанализироватьПоля(поле : IField, acc)
{
def имя = Macros.UseSiteSymbol(поле.Name);
<[ def $(имя : name) = reader.ReadInt32() ]> :: acc;
};
Message.Hint($"$(конструктор.Name)");
Message.Hint($"$(конструктор.Header.ParametersReferences)");
def загрузки = поля.FoldLeft([], проанализироватьПоля).Reverse();
def телоМетода = <[{..$загрузки }]>;
def атрибуты = Modifiers(атрибуты %| NemerleAttributes.Static, []);
<[decl: ..$атрибуты Загрузить(reader : System.IO.BinaryReader) : void $телоМетода ]>
}
Для такого вызова
[BinarySerializableRecord]
internal sealed class Класс1
{
private _поле1 : int;
}
генерируется следующий код:
[BinarySerializable]
internal sealed class Класс1
{
private _поле1 : int;
internal this(_поле1 : int)
{
this._поле1 = _поле1;
}
internal static Загрузить(reader : System.IO.BinaryReader) : void
{
def _поле1 = reader.ReadInt32();
}
}
Вопрос: как сделать, чтобы в качестве возвращаемого значения был Класс1, и в конце вызывался передаваемый конструктор?
internal static Загрузить(reader : System.IO.BinaryReader) : Класс1
{
def _поле1 = reader.ReadInt32();
Класс1(_поле1)
}