2010-06-03 5 views
8

Cette question est liée, mais pas la même chose que ceci: How do you give a C# Auto-Property a default value?En C#, puis-je faire en sorte que la propriété auto effectue un travail supplémentaire avec l'aide d'un attribut?

J'aime des propriétés d'auto, mais parfois je dois faire quelque chose comme ceci:

private string someName; 

public string SomeName 
{ 
    get 
    { 
     return someName; 
    } 

    set 
    { 
     someName = value.Trim(); 
    } 
} 

Si je dois faire la même chose que beaucoup fois, je commence à souhaiter que je n'ai pas besoin de taper autant de lignes/caractères de code. Je veux être en mesure d'intercepter la valeur et changer un peu comme si:

public string Somename 
{ 
    get; 

    [Trim] 
    set; 
} 

Est-il possible de faire quelque chose comme ça? Serait-ce stupide? Y a-t-il un meilleur moyen? D'autres commentaires généraux? J'avoue, l'exemple que j'ai donné est un peu hypothétique et je ne peux pas trouver le code exact maintenant qui m'a fait penser à ceci.

Merci.

Répondre

4

Vous pouvez le faire en utilisant AOP, comme avec Postsharp, mais pourquoi n'utilisez-vous pas simplement un magasin de support dans ce cas?

En outre, pour être complet, vous devriez probablement faire ceci:

someName = (value ?? string.Empty).Trim(); 

pour gérer null aussi bien.

Notez que si vous avez un cas particulier à l'esprit où il y a plus de travail, vous devriez probablement poser des questions sur ce cas, et non celui trivial que vous avez dans votre question

+0

Merci, ne Microsoft pas fournir ses propres solutions pour la programmation orientée aspect? –

+0

Dans une certaine mesure, avec son objet ContextBound, mais ce n'est pas une très bonne solution pour la plupart des implémentations AOP. Les tisseurs d'IL y sont beaucoup mieux ces temps-ci et peuvent travailler avec n'importe quel type d'objet, alors qu'avec la méthode Microsoft, vous devrez hériter d'une classe commune. –

+0

Attendez, un "tisserand IL" est quelque chose qui étend le sucre syntaxique dans le code différent? Est-il apparenté 'using <=> try/finally', le code contracte la magie? Je penserais qu'un bug dans un tisserand IL serait quelque peu difficile à tracer, car il pourrait confondre le débogueur. –

5

Non, il n'y a pas moyen de le faire. Les propriétés auto C# sont censées être du sucre syntaxique pour les propriétés les plus triviales et rien de plus.