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 ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Simon Mourier [MS]
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" a écrit dans le message de 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 ?
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.
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" <ShadowFil@discussions.microsoft.com> a écrit dans le message de
news: 8E98EB5C-6E03-4FA8-AAB1-C5534F757E93@microsoft.com...
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 ?
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" a écrit dans le message de 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 ?