IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

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 

 
OuvrirSommaireLe langage C++/CLIClasses, Interfaces, héritage et types de donnéesLes interfaces

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.

Créé le 12 juillet 2006  par nico-pyright(c)

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.

 
Sélectionnez
interface class IDessinable
{
	void DessineToi();
};
Créé le 12 juillet 2006  par nico-pyright(c)

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 :

 
Sélectionnez
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");
	}
};
Créé le 12 juillet 2006  par nico-pyright(c)

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 :

 
Sélectionnez
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;
}
Créé le 9 octobre 2008  par Jérôme Lambert, nico-pyright(c)

Lien : System.Type

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2006-2007 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.