FAQ C++/CLI et VC++.Net
FAQ C++/CLI et VC++.NetConsultez toutes les FAQ
Nombre d'auteurs : 29, nombre de questions : 248, création le 22 février 2013
Une interface est une classe qui spécifie un certain nombre de fonctions qui devront être obligatoirement implémentées par les classes qui implémenteront cette interface.
Il s'agit ici de fournir une structure standardisée pour réaliser des fonctionnalités spécifiques.
Une interface n'implémente aucune des ses fonctions membres, c'est aux classes qui implémentent cette interface de le faire.
Par exemple, dans le framework .Net, pour comparer des objets, nous pouvons utiliser la fonction CompareTo(). Chaque objet qui peut être comparé implémente l'interface IComparable qui oblige l'écriture d'une fonction CompareTo().
Ainsi, chaque objet disposera du même mécanisme de comparaison à travers cette méthode.
Pour définir une interface, on utilise les mots clés : interface class ou interface struct.
Tous les membres d'une interface sont publics et ne peuvent pas être autrement. Ces membres peuvent être des fonctions, des opérateurs de fonctions, des propriétés, des champs statics ou bien des événements (event).
Il est également possible de spécifier un constructeur static ou de contenir des classes Nested (i.e. des classes déclarées à l'intérieur d'autres classes). Cependant, nonobstant ces possibilités, les interfaces sont en général très simples.
interface class
IDessinable
{
void
DessineToi();
}
;
Une classe peut implémenter une ou plusieurs interface, la notation étant la même que pour dériver une classe.
Ainsi, pour implémenter l'interface IComparable, il faut surcharger la méthode CompareTo :
ref class
x : IComparable
{
int
a;
int
b;
public
:
virtual
int
CompareTo(Object^
obj)
{
x ^
x1 =
dynamic_cast
<
x ^>
(obj);
if
(x1)
{
if
(a+
b <
x1->
a +
x1->
b)
return
-
1
;
if
(a+
b >
x1->
a +
x1->
b)
return
1
;
return
0
;
}
else
throw
gcnew Exception("L'objet n'est pas de type x"
);
}
}
;
Grâce à la réflection, il est possible d'obtenir énormément d'information à partir du type d'une classe. Pour vérifier si une classe implémente une interface, il vous suffira d'utiliser la méthode GetInterface de la classe Type :
interface class
IMonInterface
{
}
;
ref class
Test : IMonInterface
{
}
;
int
main()
{
Type ^
objType =
Test::
typeid
;
Type ^
objTypeInterface =
objType->
GetInterface("IMonInterface"
, false
);
if
(objTypeInterface !=
nullptr
)
Console::
WriteLine("La classe 'Test' implémente l'interface 'IMonInterface' !"
);
else
Console::
WriteLine("La classe 'Test' n'implémente pas l'interface 'IMonInterface' !"
);
return
0
;
}
Lien : System.Type