Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

les classes et c# .. quand utiliser le "this"

4 réponses
Avatar
jgbid
Salut, je suis nouveau dans c#, j'ai appris le c++ 6.0 et travaill=E9
depuis 4 ans avec php4 et puis php5. Je d=E9but un nouveau projet et jai
d=E9cid=E9 d'y aller avec c# histoire de connaitre un nouveau language.
=C9tant familier avec php et c++, il n'y a pas trop trop de
difficult=E9... par contre je n'arrive pas =E0 saisir quand est-ce qu'il
faut utiliser le mot r=E9serv=E9 "this" dans les classes.

En php c'est tr=E8s simple, il faut toujours l'utiliser pour les
propri=E9t=E9 des classes, mais voil=E0 que tous les exemples en c# que je
regarde ce n'est pas tr=E8s clair....
Ex.:
[CODE]
public class Test
{
private string sTest;
public void Test(string sTest)
{
//=E7a ?
sTest =3D sTest;

//ou =E7a ?
this.sTest =3D sTest;
}

//autre exemple mais sans de variable ayant le m=EAme nom dans la
fonction
public void Print()
{
Console.Write(sTest);
//Normallement si c'=E9tait pareille comme en php, j'aurais fait..
Console.Write(this.sTest); // fonctionne =E9galement d'ailleur...
}
}
[/CODE]
Alors j'aimerais savoir quand utiliser et ne pas utiliser le "this"
dans les classes...
Est-ce que c'est mieux de toujours utiliser "this" ? C'est tr=E8s rare
que je vois des codes sources l'utilisant...

D'ailleur... je pose cette question parce qu'il m'est arriv=E9
d'affecter une donn=E9e membre priv=E9 dans une m=E9thodes... sans
utiliser le mot "this." parce que j'avais remarquer qu'il n'=E9tait
jamais utilis=E9.... et lorsque j'=E9tais rendu dans un autre m=E9thode,
celle que j'avais affect=E9 n'avait pas la bonne valeur, et qu'en
mettant "this." lors de l'affection, elle =E9tait alors correct dans ma
seconde m=E9thode.

Merci de m'=E9claircir....

4 réponses

Avatar
Faust
il est a utiliser quand il y a ambiguité:

dans la méthode Print, il n'y a pas d'ambiguité, on va utiliser la
variable de la classe

par contre, pour la méthode Test, il y a ambiguité: sans le this
n'importe que language utilisera le paramètre alors qu'avec le this on
précise explicitement qu'on veut la vairable de la classe

/_jgbid_ a émis l'idée suivante/ :
Salut, je suis nouveau dans c#, j'ai appris le c++ 6.0 et travaillé
depuis 4 ans avec php4 et puis php5. Je début un nouveau projet et jai
décidé d'y aller avec c# histoire de connaitre un nouveau language.
Étant familier avec php et c++, il n'y a pas trop trop de
difficulté... par contre je n'arrive pas à saisir quand est-ce qu'il
faut utiliser le mot réservé "this" dans les classes.



En php c'est très simple, il faut toujours l'utiliser pour les
propriété des classes, mais voilà que tous les exemples en c# que je
regarde ce n'est pas très clair....
Ex.:
[CODE]
public class Test
{
private string sTest;
public void Test(string sTest)
{
//ça ?
sTest = sTest;



//ou ça ?
this.sTest = sTest;
}



//autre exemple mais sans de variable ayant le même nom dans la
fonction
public void Print()
{
Console.Write(sTest);
//Normallement si c'était pareille comme en php, j'aurais fait..
Console.Write(this.sTest); // fonctionne également d'ailleur...
}
}
[/CODE]
Alors j'aimerais savoir quand utiliser et ne pas utiliser le "this"
dans les classes...
Est-ce que c'est mieux de toujours utiliser "this" ? C'est très rare
que je vois des codes sources l'utilisant...



D'ailleur... je pose cette question parce qu'il m'est arrivé
d'affecter une donnée membre privé dans une méthodes... sans
utiliser le mot "this." parce que j'avais remarquer qu'il n'était
jamais utilisé.... et lorsque j'étais rendu dans un autre méthode,
celle que j'avais affecté n'avait pas la bonne valeur, et qu'en
mettant "this." lors de l'affection, elle était alors correct dans ma
seconde méthode.



Merci de m'éclaircir....



--
Faust
"Une âme en peine peut en cacher une autre"
Avatar
jgbid
Ok.... mais devrait-il ne pas y avoir de standard sur ca ? Ou y'a-t-il
justement une documentation sur ce principe quelque part sur le net qui
expliquerais en détail l'utilisation de cette variable..

Parce qu'à mes yeux, il serait beaucoup plus méthodique d'indiqué
explicitement que l'on utilise la variable dans sa classe à toute les
fois... non?
Plutôt que de faire du code qui parfois l'utilise et parfois....

Même chose pour les méthodes... qu'arrive-t-il si je crée une
fonction à l'externe que j'inclus dans mon projet qui a le même nom
qu'une de mes méthodes ... et que je l'appelais sans le "this"
Faudra-t-il renommer toute mes appelles de la fonction pour
"this."NomDeFonction() ?

Merci


Faust a écrit :

il est a utiliser quand il y a ambiguité:

dans la méthode Print, il n'y a pas d'ambiguité, on va utiliser la
variable de la classe

par contre, pour la méthode Test, il y a ambiguité: sans le this
n'importe que language utilisera le paramètre alors qu'avec le this on
précise explicitement qu'on veut la vairable de la classe

/_jgbid_ a émis l'idée suivante/ :
> Salut, je suis nouveau dans c#, j'ai appris le c++ 6.0 et travaillé
> depuis 4 ans avec php4 et puis php5. Je début un nouveau projet et jai
> décidé d'y aller avec c# histoire de connaitre un nouveau language.
> Étant familier avec php et c++, il n'y a pas trop trop de
> difficulté... par contre je n'arrive pas à saisir quand est-ce qu'il
> faut utiliser le mot réservé "this" dans les classes.

> En php c'est très simple, il faut toujours l'utiliser pour les
> propriété des classes, mais voilà que tous les exemples en c# que je
> regarde ce n'est pas très clair....
> Ex.:
> [CODE]
> public class Test
> {
> private string sTest;
> public void Test(string sTest)
> {
> //ça ?
> sTest = sTest;

> //ou ça ?
> this.sTest = sTest;
> }

> //autre exemple mais sans de variable ayant le même nom dans la
> fonction
> public void Print()
> {
> Console.Write(sTest);
> //Normallement si c'était pareille comme en php, j'aurais fait..
> Console.Write(this.sTest); // fonctionne également d'ailleur...
> }
> }
> [/CODE]
> Alors j'aimerais savoir quand utiliser et ne pas utiliser le "this"
> dans les classes...
> Est-ce que c'est mieux de toujours utiliser "this" ? C'est très rare
> que je vois des codes sources l'utilisant...

> D'ailleur... je pose cette question parce qu'il m'est arrivé
> d'affecter une donnée membre privé dans une méthodes... sans
> utiliser le mot "this." parce que j'avais remarquer qu'il n'était
> jamais utilisé.... et lorsque j'étais rendu dans un autre méthode,
> celle que j'avais affecté n'avait pas la bonne valeur, et qu'en
> mettant "this." lors de l'affection, elle était alors correct dans ma
> seconde méthode.

> Merci de m'éclaircir....

--
Faust
"Une âme en peine peut en cacher une autre"


Avatar
Faust
/_jgbid_ a formulé ce lundi/ :
Ok.... mais devrait-il ne pas y avoir de standard sur ca ? Ou y'a-t-il
justement une documentation sur ce principe quelque part sur le net qui
expliquerais en détail l'utilisation de cette variable..



Parce qu'à mes yeux, il serait beaucoup plus méthodique d'indiqué
explicitement que l'on utilise la variable dans sa classe à toute les
fois... non?
Plutôt que de faire du code qui parfois l'utilise et parfois....



Même chose pour les méthodes... qu'arrive-t-il si je crée une
fonction à l'externe que j'inclus dans mon projet qui a le même nom
qu'une de mes méthodes ... et que je l'appelais sans le "this"
Faudra-t-il renommer toute mes appelles de la fonction pour
"this."NomDeFonction() ?



en théorie, tout à fait: le compilateur va remonter les niveaux
d'imbrication (héritage de classe, etc) pour trouver la correspondance
la plus proche

si vous avez peur d'un problème choix de la bonne méthode/variable,
rien ne vous empêche de mettre systématiquement "this"

ceci dit, contrairement au php, il n'est pas possible d'avoir des
méthodes "orphelines" (= qui n'appartiennent pas à une classe)
du coup, le problème ne se pose pas: si dans votre classe (ou ses
classes mères) il y a une méthode correspondant à la signature que vous
souhaité utiliser, alors elle sera utilisée
sinon, vous aurez une erreur de compilation

Merci



Faust a écrit :



il est a utiliser quand il y a ambiguité:

dans la méthode Print, il n'y a pas d'ambiguité, on va utiliser la
variable de la classe

par contre, pour la méthode Test, il y a ambiguité: sans le this
n'importe que language utilisera le paramètre alors qu'avec le this on
précise explicitement qu'on veut la vairable de la classe

/_jgbid_ a émis l'idée suivante/ :
Salut, je suis nouveau dans c#, j'ai appris le c++ 6.0 et travaillé
depuis 4 ans avec php4 et puis php5. Je début un nouveau projet et jai
décidé d'y aller avec c# histoire de connaitre un nouveau language.
Étant familier avec php et c++, il n'y a pas trop trop de
difficulté... par contre je n'arrive pas à saisir quand est-ce qu'il
faut utiliser le mot réservé "this" dans les classes.
En php c'est très simple, il faut toujours l'utiliser pour les
propriété des classes, mais voilà que tous les exemples en c# que je
regarde ce n'est pas très clair....
Ex.:
[CODE]
public class Test
{
private string sTest;
public void Test(string sTest)
{
//ça ?
sTest = sTest;



//ou ça ?
this.sTest = sTest;
}



//autre exemple mais sans de variable ayant le même nom dans la
fonction
public void Print()
{
Console.Write(sTest);
//Normallement si c'était pareille comme en php, j'aurais fait..
Console.Write(this.sTest); // fonctionne également d'ailleur...
}
}
[/CODE]
Alors j'aimerais savoir quand utiliser et ne pas utiliser le "this"
dans les classes...
Est-ce que c'est mieux de toujours utiliser "this" ? C'est très rare
que je vois des codes sources l'utilisant...
D'ailleur... je pose cette question parce qu'il m'est arrivé
d'affecter une donnée membre privé dans une méthodes... sans
utiliser le mot "this." parce que j'avais remarquer qu'il n'était
jamais utilisé.... et lorsque j'étais rendu dans un autre méthode,
celle que j'avais affecté n'avait pas la bonne valeur, et qu'en
mettant "this." lors de l'affection, elle était alors correct dans ma
seconde méthode.



Merci de m'éclaircir....



--
Faust
"Une âme en peine peut en cacher une autre"





--
Faust
"Une âme en peine peut en cacher une autre"
Avatar
jgbid
Ok parfait, merci pour l'explication :)


Faust a écrit :

/_jgbid_ a formulé ce lundi/ :
> Ok.... mais devrait-il ne pas y avoir de standard sur ca ? Ou y'a-t-il
> justement une documentation sur ce principe quelque part sur le net qui
> expliquerais en détail l'utilisation de cette variable..

> Parce qu'à mes yeux, il serait beaucoup plus méthodique d'indiqué
> explicitement que l'on utilise la variable dans sa classe à toute les
> fois... non?
> Plutôt que de faire du code qui parfois l'utilise et parfois....

> Même chose pour les méthodes... qu'arrive-t-il si je crée une
> fonction à l'externe que j'inclus dans mon projet qui a le même nom
> qu'une de mes méthodes ... et que je l'appelais sans le "this"
> Faudra-t-il renommer toute mes appelles de la fonction pour
> "this."NomDeFonction() ?

en théorie, tout à fait: le compilateur va remonter les niveaux
d'imbrication (héritage de classe, etc) pour trouver la correspondance
la plus proche

si vous avez peur d'un problème choix de la bonne méthode/variable,
rien ne vous empêche de mettre systématiquement "this"

ceci dit, contrairement au php, il n'est pas possible d'avoir des
méthodes "orphelines" (= qui n'appartiennent pas à une classe)
du coup, le problème ne se pose pas: si dans votre classe (ou ses
classes mères) il y a une méthode correspondant à la signature que vous
souhaité utiliser, alors elle sera utilisée
sinon, vous aurez une erreur de compilation

> Merci

> Faust a écrit :

>> il est a utiliser quand il y a ambiguité:
>>
>> dans la méthode Print, il n'y a pas d'ambiguité, on va utiliser la
>> variable de la classe
>>
>> par contre, pour la méthode Test, il y a ambiguité: sans le this
>> n'importe que language utilisera le paramètre alors qu'avec le this on
>> précise explicitement qu'on veut la vairable de la classe
>>
>> /_jgbid_ a émis l'idée suivante/ :
>>> Salut, je suis nouveau dans c#, j'ai appris le c++ 6.0 et travaillé
>>> depuis 4 ans avec php4 et puis php5. Je début un nouveau projet et jai
>>> décidé d'y aller avec c# histoire de connaitre un nouveau languag e.
>>> Étant familier avec php et c++, il n'y a pas trop trop de
>>> difficulté... par contre je n'arrive pas à saisir quand est-ce qu 'il
>>> faut utiliser le mot réservé "this" dans les classes.
>>> En php c'est très simple, il faut toujours l'utiliser pour les
>>> propriété des classes, mais voilà que tous les exemples en c# q ue je
>>> regarde ce n'est pas très clair....
>>> Ex.:
>>> [CODE]
>>> public class Test
>>> {
>>> private string sTest;
>>> public void Test(string sTest)
>>> {
>>> //ça ?
>>> sTest = sTest;
>>
>>> //ou ça ?
>>> this.sTest = sTest;
>>> }
>>
>>> //autre exemple mais sans de variable ayant le même nom dans la
>>> fonction
>>> public void Print()
>>> {
>>> Console.Write(sTest);
>>> //Normallement si c'était pareille comme en php, j'aurais fait..
>>> Console.Write(this.sTest); // fonctionne également d'ailleur...
>>> }
>>> }
>>> [/CODE]
>>> Alors j'aimerais savoir quand utiliser et ne pas utiliser le "this"
>>> dans les classes...
>>> Est-ce que c'est mieux de toujours utiliser "this" ? C'est très rare
>>> que je vois des codes sources l'utilisant...
>>> D'ailleur... je pose cette question parce qu'il m'est arrivé
>>> d'affecter une donnée membre privé dans une méthodes... sans
>>> utiliser le mot "this." parce que j'avais remarquer qu'il n'était
>>> jamais utilisé.... et lorsque j'étais rendu dans un autre métho de,
>>> celle que j'avais affecté n'avait pas la bonne valeur, et qu'en
>>> mettant "this." lors de l'affection, elle était alors correct dans ma
>>> seconde méthode.
>>
>>> Merci de m'éclaircir....
>>
>> --
>> Faust
>> "Une âme en peine peut en cacher une autre"

--
Faust
"Une âme en peine peut en cacher une autre"