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

Le
jgbid
Salut, je suis nouveau dans c#, j'ai appris le c++ 6.0 et travaill
depuis 4 ans avec php4 et puis php5. Je dbut un nouveau projet et jai
dcid 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 rserv "this" dans les classes.

En php c'est trs simple, il faut toujours l'utiliser pour les
proprit des classes, mais voil que tous les exemples en c# que je
regarde ce n'est pas trs 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 mme 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 trs rare
que je vois des codes sources l'utilisant

D'ailleur je pose cette question parce qu'il m'est arriv
d'affecter une donne membre priv dans une mthodes sans
utiliser le mot "this." parce que j'avais remarquer qu'il n'tait
jamais utilis. et lorsque j'tais rendu dans un autre mthode,
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 mthode.

Merci de m'claircir.
Vos réponses
Trier par : date / pertinence
Faust
Le #12213491
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"
jgbid
Le #12213481
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"


Faust
Le #12213471
/_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"
jgbid
Le #12213461
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"


Publicité
Poster une réponse
Anonyme