Project Lombokを使用すると、クラスに定型コードを実装するのが簡単になります。.NET属性でそれは可能ですか?そこに.netポートはありますか?
3 に答える
ロンボクでは、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のようなビルドスクリプト。これは維持するのが面倒です。
これで.NETポートができました!Lombok.NETをチェックしてください。
免責事項:私はこのライブラリの作者です。
私は言うだろう:
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()などの流暢な処理も行いません。