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

Déclarer deux fois le même variable

6 réponses
Avatar
Delf
Bonjour.

Soit la classe ci-dessous :

namespace WebConfigPageEditor
{
using System;
using System.Xml;

public class WebConfigPageEditorSection
{
[...]

*private string m_Username* =3D null;
*private string m_Password* =3D null;

public WebConfigPageEditorSection()
{
}

internal void Load(XmlNode pSectionNode)
{
[...]

*string m_Username* =3D pSectionNode.Attributes
["username"].InnerText;
*string m_Password* =3D pSectionNode.Attributes
["password"].InnerText;

[...]
}
}
}

Cette classe compile alors qu'il y a des variables d=E9clar=E9es deux
fois.
Chose marrante, au final, je n'ai aucune valeur pour Username et
m_Password.

--
Delf

6 réponses

Avatar
Delf
Je suis sous VS 2005, .NET 2.0.50727

--
Delf
Avatar
Jérémy Jeanson
Bonjour Delf,

En effet ceci peut sembler marrant... enfin cela dépend du point de vue ;)

En fait tu as deux jeux de variables, si tu fais un test tu verras que
les variables que tu déclare dans le Load ne serront auront une portée
limitée à cette méthode et ne touchent pas à celles de ta classe. Et que
si tu tu change l'état de tes variables de ta classe dans une autre
méthode, leur valeur serra bien conservée mais ne serra pas accessible
dans ton load car les variables déclarées dans le laod prennent la main.

Tout est donc des plus normal, même si il est vrai qu'il serrait plus
simple que le compilateur .net ou Visual Studio t'interdisent l'usage de
noms identiques.
--
Jérémy JEANSON
MCP
http://www.jjeanson.fr
Avatar
Jean-Michel Berthier
Bonjour,
Je ne vois rien de marrant, si ce n'est la syntaxe des variables.
Les premières sont des membres de la classe, d'où cette notation m_ (qui est
plus courante en C++ qu'en C#)
Les secondes sont des variables locales distinctes qui se trouvent avoir le
même nom.
Un programmeur qui veut retrouver ses petits évitera de les nommer en
utilisant le préfixe m_


"Delf" a écrit dans le message de
news:
Bonjour.

Soit la classe ci-dessous :

namespace WebConfigPageEditor
{
using System;
using System.Xml;

public class WebConfigPageEditorSection
{
[...]

*private string m_Username* = null;
*private string m_Password* = null;

public WebConfigPageEditorSection()
{
}

internal void Load(XmlNode pSectionNode)
{
[...]

*string m_Username* = pSectionNode.Attributes
["username"].InnerText;
*string m_Password* = pSectionNode.Attributes
["password"].InnerText;

[...]
}
}
}

Cette classe compile alors qu'il y a des variables déclarées deux
fois.
Chose marrante, au final, je n'ai aucune valeur pour Username et
m_Password.

--
Delf
Avatar
Delf
Jean-Michel Berthier avait énoncé :

Je ne vois rien de marrant, si ce n'est la syntaxe des variables.
Les premières sont des membres de la classe, d'où cette notation m_ (qui est
plus courante en C++ qu'en C#)
Les secondes sont des variables locales distinctes qui se trouvent avoir le
même nom.



Je trouve marrant que le compilateur laisse passer une telle chose car
c'est source de problème.

Après, ce que j'en dis...

Un programmeur qui veut retrouver ses petits évitera de les nommer en
utilisant le préfixe m_



Une erreur de C/C...

--
Delf
Avatar
Jérémy Jeanson
Bonjour Jean-Michel et Delf,

"m_" un vielle amis pour les plus anciens. Je ne suis pas certain qu'on
puisse l'attibuer à C mais plutôt à nos amis de Microsoft qui en ont pas
mal saupoudré dans leurs codes. Je crois même avoir lu qu'il s'agissait
de déclaration de Modules (Vb quand tu nous tiens)

Personnellement j'ai fais la connaissance de m_ en Vb6. en C et C++ j'ai
plus connu le fait de préfixer par le type.
--
Jérémy JEANSON
MCP
http://www.jjeanson.fr
Avatar
Delf
Après mûre réflexion, Jérémy Jeanson a écrit :

"m_" un vielle amis pour les plus anciens. Je ne suis pas certain qu'on
puisse l'attibuer à C mais plutôt à nos amis de Microsoft qui en ont pas mal
saupoudré dans leurs codes. Je crois même avoir lu qu'il s'agissait de
déclaration de Modules (Vb quand tu nous tiens)

Personnellement j'ai fais la connaissance de m_ en Vb6. en C et C++ j'ai plus
connu le fait de préfixer par le type.



On m'avaiit enseigné à la fac d'utiliser le préfixe _ mais je trouve ça
peu lisible.

J'utilise donc toujours m_. Pour les variables locales, je préfixe du
type simple : sMessage, iCount, dValue, oObjet, etc.

Le principal étant de rester homogène.

--
Delf