Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Fathi Bellahcene

.Net m'a tuer!

C# 5 : Caller Info Attributes.

 

Avec C#5, Microsoft n’a pas seulement ajouté le support de l’Asynchronisme avec les mots clés Async/Await…il y avait également les « Caller Info Attributes ».

Pourquoi en parler ?

Parce que dans certains cas, comme nous allons le voir, cela peut être très utile…et que ca n’est pas une feature très connue dans la communauté des développeurs .NET.

Qu’est-ce que c’est ?

Ce sont trois nouveaux Attributs qui se trouvent dans le namespace System.Runtime.CompilerServices utilisable par les paramètres de vos méthodes :

· CallerFilePath : donne le nom du fichier source d’où provient l’appel à votre méthode

· CallerLineNumber : la ligne dans le fichier

· CallerMemberName : le nom de l’  « objet » (Méthode, propriétés, constructeur, lambda,…) qui appelle votre méthode.

A quoi ça peut bien servir ?

Faire des Traces !

 

 
    public class Foo
    {
        public void Execute()
        {
            Trace.WriteError("Error!");
        }
    }
    
    public static class Trace
    {
        public static void WriteError(string message, 
                             [CallerFilePath] string callerFilePath = "",
                             [CallerLineNumber] int callerLineNumber = 0,
                             [CallerMemberName] string callerMemberName = "")
        {
            var formattedError = string.Format("{0}/{1}/{2}  --> {3}",
            callerFilePath, callerLineNumber, callerMemberName, message);
            Console.WriteLine(formattedError);
        }
    }

Nous avons ici une classe Trace avec une methode WriteError qui permet d’écrire sur la console un message formaté contenant les informations issues de nos nouveaux attributs.

Et une autre classe Foo qui contient une méthode Execute qui execute la trace. Comme vous pouvez le voir, nous n’avons besoin de passer uniquement le message d’erreur (les autres paramètres ont des valeurs par défaut mais sont renseignés au runtime).

Notre ami INotifyPropertyChanged !

 

public class Foo : INotifyPropertyChanged
    {
        private string _name; 
        public string Name
        {
            get { return _name; } 
            set { _name = value; RaisePropertyChanged(); }
        } 
        
        protected void RaisePropertyChanged([CallerMemberName] string member = "")
        {
            var propertyChanged = PropertyChanged; 
            if (propertyChanged != null)
            {
                propertyChanged(this, new PropertyChangedEventArgs(member));
            }
        } 
        public event PropertyChangedEventHandler PropertyChanged; 
        
        public void Execute()
        {
            Trace.Write("Error!");
        }
    }

On utilise notre attribut MemberCaller pour la méthode RaisePropertyChanged, ainsi, nous n’avons plus à passer un string contenant le nom de la propriété qui a été modifiée !

 

Il existe bien sûr plusieurs autres cas d’utilisations pour ces attributs (n’hésitez pas à les mettre en commentaire du post si vous en avez) et il est bien dommage de voir qu’ils sont si peu utilisés.

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: samedi 31 août 2013 11:15 par fathi
Classé sous : , ,

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01