Encapsulation + classe

Résolu
Signaler
Messages postés
778
Date d'inscription
dimanche 22 décembre 2002
Statut
Membre
Dernière intervention
27 novembre 2008
-
Messages postés
778
Date d'inscription
dimanche 22 décembre 2002
Statut
Membre
Dernière intervention
27 novembre 2008
-
Bonjour a tous,



J'ai un p'tit souci au niveau de la creation d'une classe de log !
J'ai cree un projet en mode console sous vs 2003 c# et cree aussi un fichier nommé LogError avec cette methode :



private string fichier = "AccountingLogFile.txt";
public LogError()
{
}



#region Method existFile =========================================================
/// <summary>
/// Verify is the file exist
/// </summary>
/// the file s name

public void existFile(string fichier)
{
//FileInfo fi = new FileInfo(log);


if(!File.Exists(fichier)) //(!fi.Exists)
{
FileStream fs = new FileStream(fichier,FileMode.CreateNew);
fs.Close();
Console.WriteLine("Fichier crée"+ fichier);
}
else
Console.WriteLine("Le fichier " + fichier + " " + "existe !");
}


bon donc dans mon fichier class1 et la methode void main j'appelle j'instancie diront les experts ma classe LogError avec ma variable le !


Ok ca marche sauf quand j'essayes d'appeller la methode existFile il me demande le parametre qui est le nom du fichier log !


Ce fichier je l'ai declare dans la classe LogError en champ prive !et ce afin de faire de l'encapsulation si je ne me trompe pas !


Donc ma question est celle ci comment dois je faire pour pouvoir avoir acces a mes methdes,+ variables de ma classe LogError dans mon fichier class1 ?

static void Main(string[] args)
{
LogError le = new LogError();
le.existFile();
}


Vous l'aurez remarque je debute ...


Merci et bonne semaine ...
Christophe

8 réponses

Messages postés
305
Date d'inscription
vendredi 18 juillet 2003
Statut
Membre
Dernière intervention
2 août 2010
2
Ta méthode n'a pas besoin du paramètre fichier puisque tu utilise une variable privée déjà affectée à cet effet
public void existFile()

{

//FileInfo fi = new FileInfo(log);
if(!File.Exists(fichier)) //(!fi.Exists)
{
FileStream fs = new FileStream(fichier,FileMode.CreateNew);
fs.Close();
Console.WriteLine("Fichier crée"+ fichier);
}
else
Console.WriteLine("Le fichier " + fichier + " " + "existe !");
}



Théo
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
98
private static LogError logE = new LogError();

/*
coq
MVP Visual C#
*/
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Salut,

Les méthodes statiques accèdent aux membres statiques uniquement, ou bien utilise une constante ( const ). Mais comme l'a dit RMI tu n'as pas besoin du paramètre "fichier" dans ton cas. C'est le paramètre "fs" que tu devrais mettre en champ privé plutôt, et le fermer dans le destructeur et dans Dispose.
Messages postés
778
Date d'inscription
dimanche 22 décembre 2002
Statut
Membre
Dernière intervention
27 novembre 2008

salut theo,

J'ai un autre p'tit souci qd j'instancie cette classe dans ma classe1 en faisant

LogError logE = new LogError();

je fais quelques traitements ensuite j'essayes d'acceder a mes methodes de classe LogError mais y'a pas moyen !

quand je fais logE point quelque cose il ne m'affiche rien alors que mes methodes sont publiques !!!!!

j'ai instancier LogError ici :


class Class1


{


/************* Instantation LogError ******************/


LogError logE =
new LogError();

et dans le main j'essayes donc d'acceder a une methode qui se nomme existFile mais qd je tape le . il ne me l'a propose pas !!!elle est en publique dans LogError et logerror est publique aussi !

donc ma question est celle ci comment faire pour avoir acces a ces methodes publique d'une classe donnee partout dans la classe principale !!!!


/// <summary>



/// The main entry point for the application.



/// </summary>


[STAThread]



static
void Main(
string[] args)


{


logE.existFile();

Merci

Christophe
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Main est statique et pas ta variable logE !
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
98
Un brin de lecture sur le modifier static est peut être nécessaire...

/*
coq
MVP Visual C#
*/
Messages postés
778
Date d'inscription
dimanche 22 décembre 2002
Statut
Membre
Dernière intervention
27 novembre 2008

Salut vous deux,

Je viens de lire la doc et ce que j'"en retire ...c'est un peu flou pour moi !

Ce que j'ai modifie ds le prog j'ai mis public pour ma class1

donc


/// <summary>



/// The main entry point for the application.



/// </summary>


[STAThread]



public
static
void Main(
string[] args)


{

plus haut j'instancie ma classe logerror avec


class Class1


{


/************* Instantation LogError ******************/


LogError logE =
new LogError();

mais ca ne fonctionne toujours pas !!!

qd je veux acceder a une de ces methodes au sein de la classe 1 qd je fais le . rien ne se passe !

j'ai du rate un episode

je voudrais tout simplement avoir acces a mes methodes de ma classe logerror partout dans la class 1 !

Merci
Je comprends vite mais faut m'expliquer ...tres longtemps :-) !

Christophe
Messages postés
778
Date d'inscription
dimanche 22 décembre 2002
Statut
Membre
Dernière intervention
27 novembre 2008

Ok ca tourne j'ai acces a mes methodes de logerror partout dans ma classe class1 !

c'est parfait !!!!!

merci et bonne semaine !

Christophe