GNT sans publicité, site mobile, fonctionnalitées exclusives...

Imlémentation explicite d'un membre d'interface

Le
ShadowFil
Bonjour,

L'implémentation explicite d'un membre d'interface dans une classe permet
d'exclure ce membre de l'interface publique de la classe. Il n'est alors
accessible que par une instance de l'interface. Il se comporte alors comme
s'il était private dans cette classe.

Peut-on quand même continuer à substituer l'implémentation explicite d'un
membre dans une classe dérivée ?

Exemple :

interface ISerializable
{
void GetObjectData() { }
}

class A : ISerializable
{
// Implémentation de base
void GetObjectData() { }
}

class B : A
{
// Implémentation explicite
void ISerializable.GetObjectData() { }
}

class C : B
{
// Implémentation de base
override void GetObjectData() { }
}

Merci pour votre aide.
Lire la réponse

Vidéos High-Tech et Jeu Vidéo
  • Twitter présente sa nouvelle interface Web. Une interface unifiée que l'on retrouve...
  • Google déploie pour son réseau social Google+, mais aussi Google Maps et autres, une...
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Simon Mourier [MS]
Le #12417201
Décidément, vous avez des problèmes avec les interfaces :-)
Plusieurs solutions (si j'ai bien compris la question);

public class C: B, ISerializable
{
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext
context)
{
}
}

ou

public class C: B, ISerializable
{
public new void GetObjectData(SerializationInfo info, StreamingContext
context)
{
}
}

ou

public class C: B, ISerializable
{
public override void GetObjectData(SerializationInfo info,
StreamingContext context)
{
}
}

si A avait déclaré (virtual)
public virtual void GetObjectData(SerializationInfo info, StreamingContext
context)
{
}

Simon.

"ShadowFil" news:
Bonjour,

L'implémentation explicite d'un membre d'interface dans une classe permet
d'exclure ce membre de l'interface publique de la classe. Il n'est alors
accessible que par une instance de l'interface. Il se comporte alors comme
s'il était private dans cette classe.

Peut-on quand même continuer à substituer l'implémentation explicite d'un
membre dans une classe dérivée ?

Exemple :

interface ISerializable
{
void GetObjectData(...) { }
}

class A : ISerializable
{
// Implémentation de base
void GetObjectData(...) { }
}

class B : A
{
// Implémentation explicite
void ISerializable.GetObjectData(...) { }
}

class C : B
{
// Implémentation de base
override void GetObjectData(...) { }
}

Merci pour votre aide.


Publicité
Suivre les réponses
Poster une réponse
Anonyme