Attribute de type Method et exécution automatique de code
1 réponse
azamruk
Bonjour,
J'ai un petit souci de compréhension sur les Attribute de type Method.
Voici l'idée :
J'ai une classe Attribute qui est sensée exécuter une action à chaque
entrée dans une méthode marquée par le dit attribute :
[AttributeUsage(AttributeTargets.Method)]
public class InvariantNameAttribute : Attribute {
private string m_name = null ;
/// <summary>
/// Constructeur
/// </summary>
/// <param name="name">Nom de la méthode</param>
public InvariantNameAttribute(string name) {
m_name = name ;
DoIt() ;
}
/// <summary>
/// Nom de la méthode
/// </summary>
public string Name {
get {return m_name ; }
}
private void DoIt() {
// ...
}
}
public class Class1 {
[InvariantName("toto")]
public void Test() {
}
}
Malheureusement, le code de l'attribute ne s'exécute que si je fais
une récupération explicite de l'attribute dans la méthode Test, par un
GetCustomAttribute. Ce qui n'est pas satisfaisant.
Par contre, pour un atrtribute de type Class, ça marche très bien.
J'ai dû manquer quelquechose, mais je ne vois pas.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Zazar
Bonsoir,
J'ai un petit souci de compréhension sur les Attribute de type Method.
Voici l'idée :
J'ai une classe Attribute qui est sensée exécuter une action à chaque entrée dans une méthode marquée par le dit attribute :
(snip)
Malheureusement, le code de l'attribute ne s'exécute que si je fais une récupération explicite de l'attribute dans la méthode Test, par un GetCustomAttribute. Ce qui n'est pas satisfaisant.
C'est le principe des attributs de méthode, ils ne font rien jusqu'à ce qu'on leur demande de faire explicitement quelque chose. Si vous voulez exécuter du code à chaque appel d'une méthode, regardez du coté des MessageSink En gros ça permet de voir les appels d'une fonction comme un objet sur lequel une classe peut agir.
-- Zazar
Bonsoir,
J'ai un petit souci de compréhension sur les Attribute de type Method.
Voici l'idée :
J'ai une classe Attribute qui est sensée exécuter une action à chaque
entrée dans une méthode marquée par le dit attribute :
(snip)
Malheureusement, le code de l'attribute ne s'exécute que si je fais
une récupération explicite de l'attribute dans la méthode Test, par un
GetCustomAttribute. Ce qui n'est pas satisfaisant.
C'est le principe des attributs de méthode, ils ne font rien jusqu'à ce
qu'on leur demande de faire explicitement quelque chose.
Si vous voulez exécuter du code à chaque appel d'une méthode, regardez du
coté des MessageSink En gros ça permet de voir les appels d'une fonction
comme un objet sur lequel une classe peut agir.
J'ai un petit souci de compréhension sur les Attribute de type Method.
Voici l'idée :
J'ai une classe Attribute qui est sensée exécuter une action à chaque entrée dans une méthode marquée par le dit attribute :
(snip)
Malheureusement, le code de l'attribute ne s'exécute que si je fais une récupération explicite de l'attribute dans la méthode Test, par un GetCustomAttribute. Ce qui n'est pas satisfaisant.
C'est le principe des attributs de méthode, ils ne font rien jusqu'à ce qu'on leur demande de faire explicitement quelque chose. Si vous voulez exécuter du code à chaque appel d'une méthode, regardez du coté des MessageSink En gros ça permet de voir les appels d'une fonction comme un objet sur lequel une classe peut agir.