19

Project Lombokを使用すると、クラスに定型コードを実装するのが簡単になります。.NET属性でそれは可能ですか?そこに.netポートはありますか?

4

3 に答える 3

6

ロンボクでは、Javaクラスは次のようになります。

import lombok.Data;

@Data public class Cart {
  private int id;
  private DateTime created;
  private int items;
  private int status;
}

C#にいる間、同じクラスは次のようになります

public class Cart {
  public int Id { get; set; }
  public DateTime Created { get; set; }
  public int Items { get; set; }
  public int Status { get; set; }
}

したがって、C#(この例では3.0)は他のライブラリがなくてもかなり近くなりますが、一部のプロパティに「final」を追加し始めると、Lombokの魔法の「自動コンストラクター」部分が本当に輝いています。.Netの代替案については、私が理解しているように、.Netアノテーションは、コンパイラーに送られる前にバイトコードをインターセプトする機能を提供しないため(Lombokがこのような大きな効果をもたらすために使用するもの)、オプションは一部のテンプレートに制限されますシステム+nAntのようなビルドスクリプト。これは維持するのが面倒です。

于 2010-12-10T01:01:26.603 に答える
3

これで.NETポートができました!Lombok.NETをチェックしてください。

免責事項:私はこのライブラリの作者です。

于 2021-11-09T19:00:16.550 に答える
0

私は言うだろう:

public class Cart {
   public int Id { get; set; }
   public DateTime Created { get; set; }
   public int Items { get; set; }
   public int Status { get; set; }
}
var cart = new Cart
{
   Id = 10,
   DateTime = DateTimeNow,
   ....
};

ビルダー自体は必要ありません。c#オブジェクト初期化子を使用するだけですか?とは言うものの、それは実装のものを隠しません。したがって、より複雑なinitデータの「ファクタリング」をinitに配置する場合は、ビルダーで非表示にすることができますが、オブジェクト初期化子で直接非表示にすることはできません。あなたはそれをゲッター、またはヘルパークラスのどこかに置く必要があります。ちなみに、LombokJavaジェネレーターもそうではありません。また、オブジェクト初期化子は、.id(..)。name()などの流暢な処理も行いません。

于 2020-03-16T12:25:43.737 に答える