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.
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.

Poser une question


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: