news: > Bonjour, > > Une classe qui implémente ISerializable doit fournir une implémentation
de
> la méthode GetObjectData(). > > Cette méthode implémentée doit-elle être public ou protégée ? > > Merci pour votre aide.
ShadowFil
Oui, effectivement !
Mais peut-être qu'une interface peut aussi servir à imposer uniquement à toutes les classes dérivées d'une classe de base d'implémenter un mécanisme, comme par exemple la sérialisation.
Car, je pense que la méthode GetObjectData() n'est jamais appelé par notre code, mais seulement par le mécanisme de sérialisation de .NET qui passe outre les attributs de visibilités.
"Paul Bacelar" a écrit :
Quel est l'intérêt d'implémenter une interface autrement que publiquement? -- Paul Bacelar
"Simon Mourier [MS]" wrote in message news:O# > Le mieux est de la coller à ISerializable: > > [Serializable] > public class MyClass: ISerializable > { > void ISerializable.GetObjectData( > SerializationInfo info, StreamingContext context) > { > ... > } > } > > voir ici: > http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemruntimeserializationiserializableclassgetobjectdatatopic.asp > Simon. > > "ShadowFil" a écrit dans le message de > news: > > Bonjour, > > > > Une classe qui implémente ISerializable doit fournir une implémentation de > > la méthode GetObjectData(). > > > > Cette méthode implémentée doit-elle être public ou protégée ? > > > > Merci pour votre aide. > >
Oui, effectivement !
Mais peut-être qu'une interface peut aussi servir à imposer uniquement à
toutes les classes dérivées d'une classe de base d'implémenter un mécanisme,
comme par exemple la sérialisation.
Car, je pense que la méthode GetObjectData() n'est jamais appelé par notre
code, mais seulement par le mécanisme de sérialisation de .NET qui passe
outre les attributs de visibilités.
"Paul Bacelar" a écrit :
Quel est l'intérêt d'implémenter une interface autrement que publiquement?
--
Paul Bacelar
"Simon Mourier [MS]" <simonm@online.microsoft.com> wrote in message
news:O#1oRYSFFHA.1348@TK2MSFTNGP14.phx.gbl...
> Le mieux est de la coller à ISerializable:
>
> [Serializable]
> public class MyClass: ISerializable
> {
> void ISerializable.GetObjectData(
> SerializationInfo info, StreamingContext context)
> {
> ...
> }
> }
>
> voir ici:
>
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemruntimeserializationiserializableclassgetobjectdatatopic.asp
> Simon.
>
> "ShadowFil" <ShadowFil@discussions.microsoft.com> a écrit dans le message
de
> news: 48D753AE-A201-4C9A-99B7-70ED589A68D6@microsoft.com...
> > Bonjour,
> >
> > Une classe qui implémente ISerializable doit fournir une implémentation
de
> > la méthode GetObjectData().
> >
> > Cette méthode implémentée doit-elle être public ou protégée ?
> >
> > Merci pour votre aide.
>
>
Mais peut-être qu'une interface peut aussi servir à imposer uniquement à toutes les classes dérivées d'une classe de base d'implémenter un mécanisme, comme par exemple la sérialisation.
Car, je pense que la méthode GetObjectData() n'est jamais appelé par notre code, mais seulement par le mécanisme de sérialisation de .NET qui passe outre les attributs de visibilités.
"Paul Bacelar" a écrit :
Quel est l'intérêt d'implémenter une interface autrement que publiquement? -- Paul Bacelar
"Simon Mourier [MS]" wrote in message news:O# > Le mieux est de la coller à ISerializable: > > [Serializable] > public class MyClass: ISerializable > { > void ISerializable.GetObjectData( > SerializationInfo info, StreamingContext context) > { > ... > } > } > > voir ici: > http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemruntimeserializationiserializableclassgetobjectdatatopic.asp > Simon. > > "ShadowFil" a écrit dans le message de > news: > > Bonjour, > > > > Une classe qui implémente ISerializable doit fournir une implémentation de > > la méthode GetObjectData(). > > > > Cette méthode implémentée doit-elle être public ou protégée ? > > > > Merci pour votre aide. > >
ShadowFil
Je ne comprends pas ! Le fait d'ajouter ISerializable impose une visibilité précise ? Laquelle ?
Parce que pour moi, la méthode que vous montrez dans votre exemple est private, avec ou sans ISerializable collé.
"Simon Mourier [MS]" a écrit :
Le mieux est de la coller à ISerializable:
[Serializable] public class MyClass: ISerializable { void ISerializable.GetObjectData( SerializationInfo info, StreamingContext context) { ... } }
"ShadowFil" a écrit dans le message de news: > Bonjour, > > Une classe qui implémente ISerializable doit fournir une implémentation de > la méthode GetObjectData(). > > Cette méthode implémentée doit-elle être public ou protégée ? > > Merci pour votre aide.
Je ne comprends pas !
Le fait d'ajouter ISerializable impose une visibilité précise ? Laquelle ?
Parce que pour moi, la méthode que vous montrez dans votre exemple est
private, avec ou sans ISerializable collé.
"Simon Mourier [MS]" a écrit :
Le mieux est de la coller à ISerializable:
[Serializable]
public class MyClass: ISerializable
{
void ISerializable.GetObjectData(
SerializationInfo info, StreamingContext context)
{
...
}
}
"ShadowFil" <ShadowFil@discussions.microsoft.com> a écrit dans le message de
news: 48D753AE-A201-4C9A-99B7-70ED589A68D6@microsoft.com...
> Bonjour,
>
> Une classe qui implémente ISerializable doit fournir une implémentation de
> la méthode GetObjectData().
>
> Cette méthode implémentée doit-elle être public ou protégée ?
>
> Merci pour votre aide.
"ShadowFil" a écrit dans le message de news: > Bonjour, > > Une classe qui implémente ISerializable doit fournir une implémentation de > la méthode GetObjectData(). > > Cette méthode implémentée doit-elle être public ou protégée ? > > Merci pour votre aide.
Simon Mourier [MS]
Ca permet de la cacher à l'intellisense par exemple.
Simon. "Paul Bacelar" a écrit dans le message de news:
Quel est l'intérêt d'implémenter une interface autrement que publiquement? -- Paul Bacelar
"Simon Mourier [MS]" wrote in message news:O#
Le mieux est de la coller à ISerializable:
[Serializable] public class MyClass: ISerializable { void ISerializable.GetObjectData( SerializationInfo info, StreamingContext context) { ... } }
news: > Bonjour, > > Une classe qui implémente ISerializable doit fournir une implémentation
de
> la méthode GetObjectData(). > > Cette méthode implémentée doit-elle être public ou protégée ? > > Merci pour votre aide.
Simon Mourier [MS]
Je ne comprends pas votre question. L'implémentation d'une interface est toujours accessible. On ne peut pas la protéger. C'est pour cela qu'il n'y a pas de modifier sur la déclaration.
On peut toujours faire:
[Serializable] public class MyClass: ISerializable { public void GetObjectData(SerializationInfo info, StreamingContext context) { ... } }
mais on ne peut pas faire
[Serializable] public class MyClass: ISerializable { protected void GetObjectData(SerializationInfo info, StreamingContext context) { ... } }
le fait de déclarer
[Serializable] public class MyClass: ISerializable { void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) { ... } }
rend la méthode GetObjectData acessible uniquement par cast de MyClass en ISerializable, mais elle est toujours publique.
Simon.
"ShadowFil" a écrit dans le message de news:
Je ne comprends pas ! Le fait d'ajouter ISerializable impose une visibilité précise ? Laquelle ?
Parce que pour moi, la méthode que vous montrez dans votre exemple est private, avec ou sans ISerializable collé.
"Simon Mourier [MS]" a écrit :
Le mieux est de la coller à ISerializable:
[Serializable] public class MyClass: ISerializable { void ISerializable.GetObjectData( SerializationInfo info, StreamingContext context) { ... } }
"ShadowFil" a écrit dans le message de news: > Bonjour, > > Une classe qui implémente ISerializable doit fournir une implémentation > de > la méthode GetObjectData(). > > Cette méthode implémentée doit-elle être public ou protégée ? > > Merci pour votre aide.
Je ne comprends pas votre question. L'implémentation d'une interface est
toujours accessible. On ne peut pas la protéger. C'est pour cela qu'il n'y a
pas de modifier sur la déclaration.
On peut toujours faire:
[Serializable]
public class MyClass: ISerializable
{
public void GetObjectData(SerializationInfo info, StreamingContext
context)
{
...
}
}
mais on ne peut pas faire
[Serializable]
public class MyClass: ISerializable
{
protected void GetObjectData(SerializationInfo info, StreamingContext
context)
{
...
}
}
le fait de déclarer
[Serializable]
public class MyClass: ISerializable
{
void ISerializable.GetObjectData(SerializationInfo info,
StreamingContext context)
{
...
}
}
rend la méthode GetObjectData acessible uniquement par cast de MyClass en
ISerializable, mais elle est toujours publique.
Simon.
"ShadowFil" <ShadowFil@discussions.microsoft.com> a écrit dans le message de
news: DC5A6AB1-5471-4BAF-BF98-6300C8A64EA9@microsoft.com...
Je ne comprends pas !
Le fait d'ajouter ISerializable impose une visibilité précise ? Laquelle ?
Parce que pour moi, la méthode que vous montrez dans votre exemple est
private, avec ou sans ISerializable collé.
"Simon Mourier [MS]" a écrit :
Le mieux est de la coller à ISerializable:
[Serializable]
public class MyClass: ISerializable
{
void ISerializable.GetObjectData(
SerializationInfo info, StreamingContext context)
{
...
}
}
"ShadowFil" <ShadowFil@discussions.microsoft.com> a écrit dans le message
de
news: 48D753AE-A201-4C9A-99B7-70ED589A68D6@microsoft.com...
> Bonjour,
>
> Une classe qui implémente ISerializable doit fournir une implémentation
> de
> la méthode GetObjectData().
>
> Cette méthode implémentée doit-elle être public ou protégée ?
>
> Merci pour votre aide.
Je ne comprends pas votre question. L'implémentation d'une interface est toujours accessible. On ne peut pas la protéger. C'est pour cela qu'il n'y a pas de modifier sur la déclaration.
On peut toujours faire:
[Serializable] public class MyClass: ISerializable { public void GetObjectData(SerializationInfo info, StreamingContext context) { ... } }
mais on ne peut pas faire
[Serializable] public class MyClass: ISerializable { protected void GetObjectData(SerializationInfo info, StreamingContext context) { ... } }
le fait de déclarer
[Serializable] public class MyClass: ISerializable { void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) { ... } }
rend la méthode GetObjectData acessible uniquement par cast de MyClass en ISerializable, mais elle est toujours publique.
Simon.
"ShadowFil" a écrit dans le message de news:
Je ne comprends pas ! Le fait d'ajouter ISerializable impose une visibilité précise ? Laquelle ?
Parce que pour moi, la méthode que vous montrez dans votre exemple est private, avec ou sans ISerializable collé.
"Simon Mourier [MS]" a écrit :
Le mieux est de la coller à ISerializable:
[Serializable] public class MyClass: ISerializable { void ISerializable.GetObjectData( SerializationInfo info, StreamingContext context) { ... } }
"ShadowFil" a écrit dans le message de news: > Bonjour, > > Une classe qui implémente ISerializable doit fournir une implémentation > de > la méthode GetObjectData(). > > Cette méthode implémentée doit-elle être public ou protégée ? > > Merci pour votre aide.
ShadowFil
Merci. Je ne connaissais pas cette déclaration explicite pour l'implémentation de méthodes d'interface.
Quand vous dites qu'une interface est toujours accessible, qu'on ne peut pas la protéger, cela veut que même si la classe et déclarée protected, private, internal, tout le monde pourra quand même accéder aux méthodes d'interfaces qu'elle implémente ?
Merci. Je ne connaissais pas cette déclaration explicite pour
l'implémentation de méthodes d'interface.
Quand vous dites qu'une interface est toujours accessible, qu'on ne peut pas
la protéger, cela veut que même si la classe et déclarée protected, private,
internal, tout le monde pourra quand même accéder aux méthodes d'interfaces
qu'elle implémente ?
Merci. Je ne connaissais pas cette déclaration explicite pour l'implémentation de méthodes d'interface.
Quand vous dites qu'une interface est toujours accessible, qu'on ne peut pas la protéger, cela veut que même si la classe et déclarée protected, private, internal, tout le monde pourra quand même accéder aux méthodes d'interfaces qu'elle implémente ?
ShadowFil
Qu'est-ce qui permet de cacher quoi à l'intellisense ?
Qu'est-ce qui permet de cacher quoi à l'intellisense ?
Quand on utilise Visual Studio, la petite fenêtre d'aide ne propose pas GetObjectData, ce qui est normal Simon.
"ShadowFil" a écrit dans le message de news:
Qu'est-ce qui permet de cacher quoi à l'intellisense ?
Simon Mourier [MS]
Si je récupère une référence sur l'instance de cette classe, oui. C'est le principe même de l'interface: il y a un contrat public (si l'interface est publique), je l'implémente et je déclare l'implémenter, donc forcément, on peut l'utiliser. Simon.
"ShadowFil" a écrit dans le message de news:
Merci. Je ne connaissais pas cette déclaration explicite pour l'implémentation de méthodes d'interface.
Quand vous dites qu'une interface est toujours accessible, qu'on ne peut pas la protéger, cela veut que même si la classe et déclarée protected, private, internal, tout le monde pourra quand même accéder aux méthodes d'interfaces qu'elle implémente ?
Si je récupère une référence sur l'instance de cette classe, oui. C'est le
principe même de l'interface: il y a un contrat public (si l'interface est
publique), je l'implémente et je déclare l'implémenter, donc forcément, on
peut l'utiliser.
Simon.
"ShadowFil" <ShadowFil@discussions.microsoft.com> a écrit dans le message de
news: A3C47D15-C6FD-426C-86A2-EF2C5132DB4E@microsoft.com...
Merci. Je ne connaissais pas cette déclaration explicite pour
l'implémentation de méthodes d'interface.
Quand vous dites qu'une interface est toujours accessible, qu'on ne peut
pas
la protéger, cela veut que même si la classe et déclarée protected,
private,
internal, tout le monde pourra quand même accéder aux méthodes
d'interfaces
qu'elle implémente ?
Si je récupère une référence sur l'instance de cette classe, oui. C'est le principe même de l'interface: il y a un contrat public (si l'interface est publique), je l'implémente et je déclare l'implémenter, donc forcément, on peut l'utiliser. Simon.
"ShadowFil" a écrit dans le message de news:
Merci. Je ne connaissais pas cette déclaration explicite pour l'implémentation de méthodes d'interface.
Quand vous dites qu'une interface est toujours accessible, qu'on ne peut pas la protéger, cela veut que même si la classe et déclarée protected, private, internal, tout le monde pourra quand même accéder aux méthodes d'interfaces qu'elle implémente ?