Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Attribute de type Method et exécution automatique de code

1 réponse
Avatar
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.

Pouvez-vous m'éclairer un peu ?
Merci, Azam.

1 réponse

Avatar
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