Question Scope of variable

Plus d'informations
il y a 3 ans 1 mois - il y a 3 ans 1 mois #30548 par MARTINELLI
Scope of variable a été créé par MARTINELLI
Ma question est simple : Peut-on définir au niveau d'une classe une variable globale (comme en Java  par exemple), je veux dire qu'elle soit visible par toutes les méthodes.
J'ai essayé en changeant la portée par Global. ou Script.mais cela ne marche pas.

 
Class Test  
{
    [string] $script:P ='Blabla'
    

    [void] affichage()
    {
              write-host   $P   
    }
}

$maClasse=[Test]::new()
$maClasse.affichage()

Dernière édition: il y a 3 ans 1 mois par MARTINELLI .

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 1 mois #30549 par MARTINELLI
Réponse de MARTINELLI sur le sujet Scope of variable
Pas la peine de me répondre j'ai trouvé , il faut écrire :
write-host $($this.P)

c'est quand même un peu compliqué comme écriture.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 1 mois #30551 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Scope of variable
Salut,
>>c'est quand même un peu compliqué comme écriture.
Non car ici $P est un membre de la classe, déclarée sous forme de variable
Et $This permet de pointer sur l'instance en cours ce qui permet au compilateur de savoir de quel P on parle :
[string] $p ='Variable'
Class Test  
{
    [string] $p ='Propriété'
    
    [void] Affichage()
    {
        $S='Interne'
        write-host  $this.P   
        Write-warning $S
        Write-warning "$((Get-Variable P).value)"
    }
}
$o=[Test]::new()
$o.Affichage()
Ici la variable $S ne peut être nommée $P car il existe déjà un membre de même nom et avec Get-Variable on peut adresser la variable $P déclarée en dehors de la classe, mais c'est une approche à éviter.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 1 mois - il y a 3 ans 1 mois #30553 par MARTINELLI
Réponse de MARTINELLI sur le sujet Scope of variable
Laurent j'apprécie toujours tes remarques et ton expertise. J'avais compris ce que tu dis, mais si l'on prend d'autres langages OO, par exemple Java le problème est résolu plus simplement

Class Test
{
String P = "blabla";
void affichage()
{
System.out.println(P);
}
}


Toutes les variables définies au niveau de la classe ont une visibilité globale. Si la même variable est redéfinie au niveau locale (par exemple dans une méthode), c'est elle qui prend le pas sur la variable globale. Donc les duplications de nom sont acceptées. "this" est aussi utilisée lorsqu'il y a ambiguïté.
Par exemple

void method()
{
String P;
P = this.P;
}


Quoiqu'il en soit, comme je l'ai dit je débute avec PowerShell, et je découvre ses subtilités et ses difficultés. Par exemple quelle différence entre :
write-host $this.P
et
write-host $($this.P)

Merci encore**

Gégé
Dernière édition: il y a 3 ans 1 mois par MARTINELLI .

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 1 mois #30554 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Scope of variable
>>si l'on prend d'autres langages OO,
Sous PS l'orienté objet (les classes) est une adaptation, ce qui pour moi donne cette 'entre deux',

>>quelle différence entre
Ici aucune.
Il s'agit de grouper des instructions soit par () ou $(), voir ce post.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.072 secondes
Propulsé par Kunena