Le projet Lombok rend trivial l'implémentation du code standard dans les classes. Est-ce possible avec les attributs .NET? Y a-t-il un port .net là?Comment fonctionne le projet Lombok en Java et est-ce possible dans .net en utilisant des attributs?
Comment fonctionne le projet Lombok en Java et est-ce possible dans .net en utilisant des attributs?
Répondre
bien à Lombok une classe Java pourrait ressembler à ceci
import lombok.Data;
@Data public class Cart {
private int id;
private DateTime created;
private int items;
private int status;
}
Alors que dans C# la même classe ressemblerait à ceci
public class Cart {
public int Id { get; set; }
public DateTime Created { get; set; }
public int Items { get; set; }
public int Status { get; set; }
}
So C# (3.0 dans cet exemple) obtient assez proche sans toutes les autres bibliothèques, mais au fur et à mesure que vous ajoutez "final" à certaines propriétés, la partie magique de Lombok "auto constructor" brille vraiment. Comme pour une alternative .Net, si je comprends bien les annotations .Net ne permettent pas d'intercepter le code d'octet avant qu'il ne passe au compilateur (ce que Lombok utilise pour un tel effet), donc vos options sont limitées à un modèle système + un script de construction comme nAnt. Ce serait un gâchis à maintenir.
Vous ne pouvez pas intercepter la génération de code octet mais il existe des bibliothèques assez sophistiquées pour analyser les assemblages finaux. Vous pouvez utiliser des champs publics dans le code, puis procéder à une étape de post-construction pour réécrire tous les assemblages impliqués afin d'utiliser les propriétés générées automatiquement. Mais vous ne serez pas capable de réaliser tout ce que Lombok fait avec cette technique. Mieux vaut utiliser quelque chose comme T4 (génération de code) et des classes partielles. –
@Jason votre code C# n'est pas vraiment équivalent au code Java: equals et hashCode sont manquants. Lombok génère cela aussi. – Jirka
C'est vrai. Cela fait un certain temps que j'ai écrit cette réponse. J'ai appris beaucoup plus depuis mais je pense que mon point de vue est toujours valable. Ce Lombok fait beaucoup de choses automatiquement et la méthode qu'il utilise est (encore) unique à Java. –
Est-ce que .Net n'a pas déjà de propriétés? – Goibniu
@Rlmeq oui mais voir cet exemple http://projectlombok.org/features/Data.html. Il ressemble presque à de la magie avec un seul attribut – suhair