Y at-il un moyen de générer des propriétés automatiques C# avec Codedom ou peut-être un autre ensemble de librairies que je peux utiliser?Générer des propriétés automatiques C# avec Codedom
Répondre
CodeDom est censé être une sorte de AST qui peut être converti en plusieurs langues (généralement C# et VB. NET). Par conséquent, vous ne trouverez pas les fonctionnalités qui sont le sucre syntaxique d'une langue spécifique dans CodeDom.
Non, ce n'est pas: C# CodeDom Automatic Property
Jetez un coup d'oeil dans this article pour obtenir quelques exemples utiles
En fait, les commentaires sur le fait qu'il soit facile d'utiliser un CodeSnippetStatement sont trompeurs car CodeTypeDeclaration n'a aucune collection d'instructions à laquelle vous pouvez ajouter ces extraits.
Vous pouvez utiliser la classe CodeSnippetTypeMember à cette fin.
Par exemple:
CodeTypeDeclaration newType = new CodeTypeDeclaration("TestType");
CodeSnippetTypeMember snippet = new CodeSnippetTypeMember();
snippet.Comments.Add(new CodeCommentStatement("this is integer property", true));
snippet.Text="public int IntergerProperty { get; set; }";
newType.Members.Add(snippet);
Vous pouvez faire ceci: Selon How to: Create a Class Using CodeDOM
// Declare the ID Property.
CodeMemberProperty IDProperty = new CodeMemberProperty();
IDProperty.Attributes = MemberAttributes.Public;
IDProperty.Name = "Id";
IDProperty.HasGet = true;
IDProperty.HasSet = true;
IDProperty.Type = new CodeTypeReference(typeof(System.Int16));
IDProperty.Comments.Add(new CodeCommentStatement(
"Id is identity"));
targetClass.Members.Add(IDProperty);
Cela ne fonctionne pas, car il génère deux méthodes' set' et 'get' vides qui résulteront dans la compilation des erreurs. Le 'CodeSnippetTypeMember' (http://stackoverflow.com/a/23876973/191148) est la solution –
donc il d'autres bibliothèques que je peux utiliser? –
@Yassir Ce n'est vraiment pas si difficile de créer un backing field et de l'utiliser dans le getter/setter. – chakrit
vous n'avez pas besoin; Comme l'a dit Marc Gravell, vous devez l'implémenter vous-même, car ce n'est qu'un compilateur (ie le compilateur .net crée une variable privée pour contenir la valeur de votre propriété automatique) –