PowerAMC représente les événements, indexeurs et propriétés C# sous la forme d'attributs UML standard, dotés des propriétés supplémentaires suivantes :
Evénements – stéréotype <<Event>> avec une ou plusieurs opérations liées représentant les gestionnaires add et/ou remove
Indexeurs – stéréotype <<Indexer>> avec une ou plusieurs opérations liées représentant les accesseurs get et/ou set
Propriétés – stéréotype <<Property>> avec une ou plusieurs opérations liées représentant les accesseurs get et/ou set. En outre, vous devez noter que :
La visibilité de la propriété est définie par l'opération de l'accesseur get si elle existe, dans le cas contraire par celle de l'accesseur set.
Lorsqu'un attribut devient une propriété, un attribut de mise en oeuvre est automatiquement créé pour stocker la valeur de la propriété. L'attribut de réalisation n'est pas persistant et a une visibilité private. Il a le stéréotype <<PropertyImplementation>> et porte le même nom que la propriété, mais commence par une minuscule. Si le nom de la propriété commence déjà par un caractère minuscule, son premier caractère sera converti en majuscule.
L'attribut de réalisation peut être retiré pour les propriétés qui n'en n'ont pas l'usage (propriétés calculées, par exemple)
Si l'attribut étendu booléen Extern est défini à true, aucune opération ne doit être liée à cette propriété.
Lorsqu'une déclaration de propriété inclut un modificateur Extern, la propriété est dite propriété externe. Une déclaration de propriété externe ne fournit aucune réalisation concrète, chacune de ses déclarations d'accesseur consiste alors en un point-virgule.
Dans l'exemple suivant, la classe Employee contient 2 propriétés. L'opération Setter a été retirée de la propriété TimeReport :
{ public class Employee { private int _Function; private int _TimeReport; // Property Function private int Function { get { return _Function; } set { if (this._Function != value) this._Function = value; } } // Property TimeReport private int TimeReport { get { return _TimeReport; } } }
Dans l'exemple suivant, la classe Person contient un attribut indexeur Item. Le paramètre utilisé pour trier la propriété est String name :
public class Person { private Hashtable _childAges; // Indexer Item private int this[String name] { get { return (int)_ChildAges[name]; } set { _ChildAges[name] = value; } } } Person someone; someone ["Alice"] = 3; someone ["Elvis"] = 5;