You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mchsamples-.net-core/p03_POO/ex_015_004_using_static/Program.cs

127 lines
4.6 KiB

// ========================================================================
//
// Copyright (C) 2016-2017 MARC CHEVALDONNE
// marc.chevaldonne.free.fr
//
// Module : Program.cs
// Author : Marc Chevaldonné
// Creation date : 2016-09-23
//
// ========================================================================
using System;
using static System.Console;
using static ex_015_004_using_static.Etudiant;
using static ex_015_004_using_static.BacOrigine;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ex_015_004_using_static
{
public class Etudiant
{
Random random = new Random();
public int GenereNoteAvecRandomNonStatic()
{
return random.Next(0, 21);
}
static Random randomStatic;
public int GenereNoteAvecRandomStatic()
{
return randomStatic.Next(0, 21);
}
//un constructeur static est nécessairement privé et ne peut pas être appelé directement
//il sera appelé lors de la première construction d'un objet de ce type
static Etudiant()
{
randomStatic = new Random();
//ici, il est évidemment préférable d'utiliser l'initialiseur plutôt que le constructeur pour Random
//mais c'est juste pour l'exemple d'un constructeur static
}
//membre non statique
public string Année = "2013-2014";
//méthode non statique
public string GetAnnéeFormation()
{
//une méthode non statique peut utiliser aussi bien des membres non statiques que des membres statiques
return $"{Formation} ({Année})";
}
//membre statique (partagé par toutes les instances de cette classe)
public static string Formation = "DUT Informatique";
//méthode statique
public static string GetFormation()
{
//une méthode statique ne peut pas utiliser de membres non statiques
//return string.Format("{0} ({1})", Formation, Année);
//une méthode statique ne peut utiliser que des membres statiques
return $"{Formation} ({Université})";
}
//un membre const est toujours statique, même si on ne le précise pas dans la syntaxe
public const string Université = "Université d'Auvergne";
public BacOrigine Origine;
}
public enum BacOrigine
{
Inconnu,
S,
ES,
L,
STI2D
}
class Program
{
static void Main(string[] args)
{
OutputEncoding = System.Text.Encoding.UTF8;
WriteLine("sans : using static ex_015_004_using_static.Etudiant; il faudrait écrire :");
WriteLine($"Etudiant.Formation : {Etudiant.Formation}");
WriteLine($"Etudiant.Université : {Etudiant.Université}");
WriteLine($"Etudiant.GetFormation() : {Etudiant.GetFormation()}");
WriteLine();
WriteLine("grâce à : using static ex_015_004_using_static.Etudiant; on peut simplement écrire :");
WriteLine($"Formation : {Formation}");
WriteLine($"Université : {Université}");
WriteLine($"GetFormation() : {GetFormation()}");
WriteLine();
WriteLine("C'est d'ailleurs la même chose pour l'utilisation de la Console :");
WriteLine("sans : using static System.Console; il faudrait écrire :");
string prout = "prout";
WriteLine($"Console.WriteLine(\"prout\");");
Console.WriteLine(prout);
WriteLine();
WriteLine("grâce à : using static System.Console; on peut écrire :");
WriteLine($"WriteLine(\"prout\");");
WriteLine(prout);
WriteLine();
WriteLine("Marche également avec les enum");
WriteLine("sans : using static ex_015_004_using_static.BacOrigine; il faudrait écrire");
WriteLine("e.Origine = BacOrigine.STI2D;");
Etudiant e = new Etudiant();
e.Origine = BacOrigine.STI2D;
WriteLine();
WriteLine("grâce à : using static ex_015_004_using_static.BacOrigine; on peut écrire");
WriteLine("e.Origine = STI2D;");
e.Origine = STI2D;
WriteLine();
WriteLine("Tout cela marche très bien, tant que le compilateur ne détecte aucune ambiguité");
}
}
}