OVH Cloud OVH Cloud

remoting: CreateInstance et Membre static

2 réponses
Avatar
cyrille
Bonjour,

Si quelqu'un pouvait m'=E9clairer sur ce point :

Via le remoting,
j'instancie un objet depuis le client avec la m=E9thode Activator.CreateI=
nstance(type).

La classe de cet objet poss=E8de un membre static.
C=F4t=E9 serveur, bien que j'initialise ce membre static avant de de regi=
strer la classe (en Singleton),
et pourtant il n'est pas initialis=E9 dans l'instance que je r=E9cup=E8re=
c=F4t=E9 client.

en code "raccourci" =E7a donne :

common.cs

class RemoteObject {
public static toto =3D 123 ;
}

serveur.cs

RemoteObject.toto =3D 789 ;
RemotingConfiguration.RegisterWellKnownServiceType(Type.GetType("RemoteOb=
ject"),"Test",WellKnownObjectMode.Singleton);

client.cs

RemoteObject rm =3D (RemoteObject) Activator.CreateInstance(Type.GetType(=
"RemoteObject"));
Debug.WriteLine("toto =3D "+rm.toto);

Et bien =E7a =E9crit :
toto =3D 123
Alors que je m'attendais =E0 voir
toto =3D 789

Merci pour vos lumi=E8res ;o)

cyrille

2 réponses

Avatar
Paul Bacelar
Pour Thomas, cette définition de static n'est valable quand C.

C'est particulièrement inélégant d'utiliser de cette manière des statics.

Vous avez en faite 2 static, car une variable static est liée à un type
chargé, ce même type n'a de sens que dans un AppDomain. Vous avez 2
AppDomain, celui du client et celui du serveur, donc 2 statics qui pour
l'une est mise à jour dans le serveur et pour l'autre conserve la valeur
initialisé dans le constructeur de la class (BEURK!)


Paul Bacelar

"Lebrun Thomas" <lebrun_thomas_at_hotmail.com> wrote in message
news:
Une variable static n'est utilisable que dans le fichier où elle est


déclarée.

En esperant que cela t'aide....

A+

-------------------
Thomas LEBRUN
http://morpheus.developpez.com


"cyrille" wrote:

> Bonjour,
>
> Si quelqu'un pouvait m'éclairer sur ce point :
>
> Via le remoting,
> j'instancie un objet depuis le client avec la méthode


Activator.CreateInstance(type).
>
> La classe de cet objet possède un membre static.
> Côté serveur, bien que j'initialise ce membre static avant de de


registrer la classe (en Singleton),
> et pourtant il n'est pas initialisé dans l'instance que je récupère côté


client.
>
> en code "raccourci" ça donne :
>
> common.cs
>
> class RemoteObject {
> public static toto = 123 ;
> }
>
> serveur.cs
>
> RemoteObject.toto = 789 ;
>


RemotingConfiguration.RegisterWellKnownServiceType(Type.GetType("RemoteObjec
t"),"Test",WellKnownObjectMode.Singleton);
>
> client.cs
>
> RemoteObject rm = (RemoteObject)


Activator.CreateInstance(Type.GetType("RemoteObject"));
> Debug.WriteLine("toto = "+rm.toto);
>
> Et bien ça écrit :
> toto = 123
> Alors que je m'attendais à voir
> toto = 789
>
> Merci pour vos lumières ;o)
>
> cyrille
>
>
>


Avatar
Zazar
Bonjour,

> Pour Thomas, cette définition de static n'est valable quand C.

Oui, je sais ;)
Mais je n'ai pas trouvé la définition du static en C#, j'ai donc supposé


que
c'était la même.
Mais merci de m'avoir corriger :)




Si je puis me permettre : ce n'est pas la première fois que vous attribuez à
un language une caractèristique d'un autre language sans faire de
vérifications. Vous devriez éviter de faire ce genre d'hypothèses
dangereuses .
Sinon, une petite recherche sur google vous permettrait de trouver assez
facilement ce que signifie le mot-clef static.

--
Zazar