ABAZE DevS Blog

La Développement une vie une Passion

Archive for the '.C# 4.5' Category

GAC ( Global Assembly Cache

Posted by abaze17 on 19th mars 2017

Chaque ordinateur sur lequel est installé la CLR( Common Language Runtime dispose d’un cache de code.

Le GAC  stocke des assemblys spécifiquement désignés pour être partagés par plusieurs applications sur l’ordinateur.

Il est necessaire  partager des assemblys en les installant dans le cache d’assembly global uniquement lorsque vous en avez besoin.

Il Est nécessare de  partager des ensemblys dans l’installation dans le cache d’assemblage global que Vous avez besoin. En règle générale, garder les dépendances d’assemblage privé et de localiser les assemblages dans le répertoire de l’application sinon le partage d’un ensemble est explicitement nécessaire. En outre, il est nécessaire d’installer des assemblages dans le cache de l’assemblée mondiale pour les rendre accessibles à COM Interop ou code non manage

Commanda afficher le GAC:  %windir%\Microsoft.NET\assembly., is %windir%\assembly.

Posted in .C# 4.5 | No Comments »

CLR

Posted by abaze17 on 22nd avril 2012

Common Language Runtime (CLR) est le nom choisi par Microsoft pour le composant de machine virtuelle du framework .NET. Il s’agit de l’implémentation par Microsoft du standard Common Language Infrastructure (CLI) qui définit l’environnement d’exécution des codes de programmes. Le CLR fait tourner une sorte de bytecode nomméCommon Intermediate Language (CIL). Le compilateur à la volée transforme le code CIL en code natif spécifique au système d’exploitation. Le CLR fonctionne sur des systèmes d’exploitation Microsoft Windows.

Le CLR est composé des quatre parties suivantes :

·         Common Type System (CTS) :

Common Type System (CTS) est un terme de Microsoft utilisé pour décrire le traitement des types de données dans le framework .NET.

·         Common Language Specification (CLS) ;

·         Metadata ;

·         Virtual Execution System (VES).

Le CLR est à .NET ce que la JVM est à Java, c’est-à-dire une machine virtuelle, sans laquelle l’exécution de code .NET ne serait pas possible. À l’inverse de son concurrent, leframework .NET a été conçu pour permettre l’interopérabilité entre différents langages.

Quel que soit le langage utilisé pour écrire une application .NET, le code doit être transformé en CIL (Common Intermediate Language). Ce code intermédiaire ne comporte aucune instruction relative au matériel (i.e. hardware) ou au système d’exploitation. Il ne peut donc pas être exécuté directement. Malgré cela, on pourrait tout à fait imaginer écrire directement une application en IL, langage qui ressemble à l’assembleur, sans passer par un langage de dernière génération comme le C#.

Le CLR est nécessaire pour exécuter le code intermédiaire. Il est basé sur le CTS (Common Type System)1 et le CLS (Common Language Specification). Il apporte de nombreuses fonctionnalités comme le ramasse-miettes en anglais : Garbage Collector (la mémoire utilisée par l’application lors de l’exécution est optimisée), la BCL (Base Class Library), et le système de sécurité. Une fois le code présent dans le CLR, il va enfin pouvoir être compilé par le JIT Compiler (Just in Time) en langage natif de la machine.

Il existe trois types de JIT :

·         Pre-JIT : le code entier est directement compilé ;

·         Econo-JIT : le code est compilé par parties, et la mémoire libérée si nécessaire ;

·         Normal-JIT : le code n’est compilé que quand c’est nécessaire, mais est ensuite placé en cache pour pouvoir être réutilisé.

Quel que soit le type de JIT, le but est d’accélérer l’exécution du code en réutilisant dès que possible le cache. Pour voir ceci visuellement, c’est très simple. Il suffit d’écrire une simple application ASP.NET (Hello World par exemple). À la première exécution, le code est compilé. Par la suite et aussi longtemps que l’application ne subit pas de modifications, le cache sera utilisé, d’où une vitesse d’exécution bien plus rapide que lors de la première exécution.

Le JIT fourni par Microsoft ne produit évidemment que du code natif Windows, mais les spécifications étant disponibles, il s’est trouvé un groupe de personnes ayant décidé de porter .NET sur Linux, donnant naissance à la plate-forme de développement libre Mono.

Posted in .C# 4.5 | No Comments »

Polymorphism

Posted by abaze17 on 19th avril 2012

Le polymorphisme est souvent désigné comme le troisième pilier de la programmation orientée objet, après encapsulation et de l’héritage. Le polymorphisme est un mot grec qui signifie «beaucoup de forme” et il a deux aspects distincts:

• Au moment de l’exécution, les objets d’une classe dérivée peuvent être traités comme des objets d’une classe de base dans des endroits tels que les paramètres de la méthode et des collections ou des tableaux. Lorsque cela se produit, le type déclaré de l’objet est plus identique à son type run-time.

• Les classes de base peuvent définir et mettre en œuvre des méthodes virtuelles, et les classes dérivées peuvent les remplacer, ce qui signifie qu’ils fournissent leur propre définition et la mise en œuvre. Au moment de l’exécution, lorsque le code client appelle la méthode, le CLR regarde le type d’exécution de l’objet, et invoque que substitution de la méthode virtuelle. Ainsi, dans votre code source, vous pouvez appeler une méthode sur une classe de base, et causer la version d’une classe dérivée de la méthode à exécuter.

Les méthodes virtuelles vous permettent de travailler avec des groupes d’objets liés d’une manière uniforme. Par exemple, supposons que vous avez une application de dessin qui permet à un utilisateur de créer différents types de formes sur une surface de dessin. Vous ne savez pas au moment de la compilation quels types spécifiques de formes que l’utilisateur va créer. Toutefois, l’application doit garder une trace de tous les différents types de formes qui sont créés, et il doit les mettre à jour en réponse aux actions de la souris de l’utilisateur. Vous pouvez utiliser le polymorphisme pour résoudre ce

 

public class Shape
{
    // A few example members
    public int X { get; private set; }
    public int Y { get; private set; }
    public int Height { get; set; }
    public int Width { get; set; }
 
    // Virtual method
    public virtual void Draw()
    {
        Console.WriteLine("Performing base class drawing tasks");
    }
}
 
class Circle : Shape
{
    public override void Draw()
    {
        // Code to draw a circle...
        Console.WriteLine("Drawing a circle");
        base.Draw();
    }
}
class Rectangle : Shape
{
    public override void Draw()
    {
        // Code to draw a rectangle...
        Console.WriteLine("Drawing a rectangle");
        base.Draw();
    }
}
class Triangle : Shape
{
    public override void Draw()
    {
        // Code to draw a triangle...
        Console.WriteLine("Drawing a triangle");
        base.Draw();
    }
}
 
class Program
{
    static void Main(string[] args)
    {
        // Polymorphism at work #1: a Rectangle, Triangle and Circle
        // can all be used whereever a Shape is expected. No cast is
        // required because an implicit conversion exists from a derived 
        // class to its base class.
        System.Collections.Generic.List shapes = new System.Collections.Generic.List();
        shapes.Add(new Rectangle());
        shapes.Add(new Triangle());
        shapes.Add(new Circle());
 
        // Polymorphism at work #2: the virtual method Draw is
        // invoked on each of the derived classes, not the base class.
        foreach (Shape s in shapes)
        {
            s.Draw();
        }
 
        // Keep the console open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
 

}

Posted in .C# 4.5 | No Comments »

STRUCTS

Posted by abaze17 on 10th mars 2011

Structs partagent la plupart du même syntaxe que les classes, bien que structs sont plus limitées que les classes:

• Dans une déclaration de struct, les champs ne peuvent pas être initialisés sauf si elles sont déclarées comme const ou statique.

• Un struct ne peut pas déclarer un constructeur par défaut (un constructeur sans paramètres) ou un destructor.

• Structs sont copiés sur la cession. Quand un struct est affecté à une nouvelle variable, toutes les données sont copiées, et toute modification apportée à la nouvelle copie ne change pas les données de la copie originale. Ceci est important de se rappeler lorsque l’on travaille avec des collections de types de valeur tels que Dictionnaire .

• Structs sont des types de valeur et les classes sont des types de référence.

• Contrairement aux classes, structs peuvent être instanciés sans l’aide d’un nouvel opérateur.

• Structs peut déclarer des constructeurs qui ont des paramètres.

• Un struct ne peut pas hériter d’une autre struct ou de classe, et il ne peut pas être la base d’une classe. Tous les structs héritent directement de System.ValueType, qui hérite de System.Object.

• Un struct peut implémenter des interfaces.

• Un struct peut être utilisé comme un type nullable et peut être attribué une valeur nulle.

public struct CoOrds

{

public int x, y;

public CoOrds(int p1, int p2)

{

x = p1;

y = p2;

}

}

il est une erreur de définir un constructeur par défaut (parameterless) pour une struct. Il est également une erreur d’initialisation d’un champ d’instance dans un corps de structure. Vous pouvez initialiser les membres de struct uniquement à l’aide d’un constructeur paramétré ou en accédant aux membres individuellement après la struct est déclarée. Tous les membres privés ou autrement inaccessibles peuvent être initialisés seulement dans un constructeur.

class TestCoOrds
{
    static void Main()
    {
        // Initialize:
        CoOrds coords1 = new CoOrds();
        CoOrds coords2 = new CoOrds(10, 10);

        // Display results:
        Console.Write("CoOrds 1: ");
        Console.WriteLine("x = {0}, y = {1}", coords1.x, coords1.y);

        Console.Write("CoOrds 2: ");
        Console.WriteLine("x = {0}, y = {1}", coords2.x, coords2.y);

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }

}

Posted in .C# 4.5 | No Comments »

 

Créer un Blog | Nouveaux blogs | Top Tags | 14 articles | blog Gratuit | Abus?