项目中的Lombok项目如何工作,是否可以在.net中使用属性?

suh*_*air 11 .net java lombok

Lombok项目使得在类中实现样板代码变得微不足道.这可能与.NET属性有关吗?那里有任何.net端口吗?

Col*_*ert 9

现在有一个 .NET 端口!查看Lombok.NET

免责声明:我是这个库的作者。


Jas*_*ske 6

在 Lombok 中,Java 类可能如下所示

import lombok.Data;

@Data public class Cart {
  private int id;
  private DateTime created;
  private int items;
  private int status;
}
Run Code Online (Sandbox Code Playgroud)

而在 C# 中,同一个类看起来像这样

public class Cart {
  public int Id { get; set; }
  public DateTime Created { get; set; }
  public int Items { get; set; }
  public int Status { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

因此,C#(本例中为 3.0)在没有任何其他库的情况下变得相当接近,但当您开始向某些属性添加“final”时,Lombok 神奇的“自动构造函数”部分真正大放异彩。至于 .Net 替代方案,据我了解,.Net 注释不提供在字节码进入编译器之前拦截字节码的能力(Lombok 使用它来实现如此巨大的效果),因此您的选择仅限于某些模板系统 + 像 nAnt 这样的构建脚本。维护起来会很混乱。

  • 您的 C# 代码相当于 Lombok 的 `@Getter @Setter` 注释,但 `@Data` 不止于此。`@Data` 是一个方便的快捷注释,它将 `@ToString`、`@EqualsAndHashCode`、`@Getter` / `@Setter` 和 `@RequiredArgsConstructor` 的功能捆绑在一起。 (11认同)
  • @Jason,你的 C# 代码并不真正等同于 Java 代码:缺少 equals 和 hashCode。Lombok 也会生成它。 (7认同)
  • 此外,Lombok 还具有诸如“@AllArgsConstructor”、“@RequiredArgsConstructor”和“@NoArgsConstructor”之类的构造函数生成器,它们对于消除类中的噪音非常有用。希望我们为 .NET 提供这个 (4认同)