Page d'Accueil

Techniques d'utilisation des structures

 

Une structure comme propriété

Une fois qu'une structure existe, vous pouvez l'utiliser comme un type de données. Par exemple, vous pouvez créer une propriété qui est un type de structure. Les règles sont identiques que celles que nous avons passées en revue pour créer une propriété d'une classe. Après avoir créé la propriété, vous pouvez l'utiliser selon que votre suffisance. Voici un exemple :

using System;

public struct Real
{
    private double val;

    public double Value
    {
        get { return val; }
        set { val = value; }
    }

    public double Read()
    {
        return double.Parse(Console.ReadLine());
    }
}

public struct Rectangle
{
    Real len;
    Real hgt;

    public Real Length
    {
        get { return len; }
        set { len = value; }
    }

    public Real Height
    {
        get { return hgt; }
        set { hgt = value; }
    }

    public void CreateRectangle()
    {
        Real rat = new Real();

        Console.WriteLine("Enter the dimensions of the rectangle");
        Console.Write("Enter the length: ");
        len.Value = rat.Read();
        Console.Write("Enter the height: ");
        hgt.Value = rat.Read();
    }
}

public class Program
{
    static int Main()
    {
        Rectangle rect = new Rectangle();

        rect.CreateRectangle();
        Console.WriteLine();

        Console.WriteLine("Rectangle Characteristics");
        Console.WriteLine("Length:    {0}", rect.Length.Value);
        Console.WriteLine("Height:    {0}", rect.Height.Value);
        Console.WriteLine("Perimeter: {0}",
            (rect.Length.Value + rect.Height.Value) * 2);
        Console.WriteLine("Area:      {0}",
            rect.Length.Value * rect.Height.Value);

        return 0;
    }
}

Voici un exemple d'exécution du programme :

Enter the dimensions of the rectangle
Enter the length: 44.84
Enter the height: 26.75

Rectangle Characteristics
Length:    44.84
Height:    26.75
Perimeter: 143.18
Area:      1199.47
Press any key to continue . . .

Renvoi d'une structure à patir d'une méthode

Comme un type de données régulier ou une classe, une structure peut servir comme un type de retour d'une méthode.  Les règles sont davantage liées à celles d'une classe. En créant la méthode, dactylographiez le nom de la structure du côté gauche du nom de la méthode. Dans le corps de la méthode, appliquez le comportement désiré. Avant de d'éprouver la méthode, assurez vous du retour d'une valeur valide qui est du type de la structure. Quand une méthode renvoie une valeur du type d'une structure, vous pouvez assigner à la méthode une variable du type de la structure.

Voici un exemple d'application d'une méthode qui renvoie un type de structure, y compris appeler la méthode et utiliser sa valeur :

using System;

public struct Real
{
    private double val;

    public double Value
    {
        get { return val; }
        set { val = value; }
    }

    public double Read()
    {
        return double.Parse(Console.ReadLine());
    }
}

public struct Rectangle
{
    Real len;
    Real hgt;

    public Real Length
    {
        get { return len; }
        set { len = value; }
    }

    public Real Height
    {
        get { return hgt; }
        set { hgt = value; }
    }

    public void CreateRectangle()
    {
        Real rat = new Real();

        Console.WriteLine("Enter the dimensions of the rectangle");
        len = GetLength();
        Console.Write("Enter the height: ");
        hgt.Value = rat.Read();
    }

    public Real GetLength()
    {
        Real rat = new Real();

        Console.Write("Enter the length: ");
        rat.Value = rat.Read();
        return rat;
    }
}

public class Program
{
    static int Main()
    {
        Rectangle rect = new Rectangle();

        rect.CreateRectangle();
        Console.WriteLine();

        Console.WriteLine("Rectangle Characteristics");
        Console.WriteLine("Length:    {0}", rect.Length.Value);
        Console.WriteLine("Height:    {0}", rect.Height.Value);
        Console.WriteLine("Perimeter: {0}",
            (rect.Length.Value + rect.Height.Value) * 2);
        Console.WriteLine("Area:      {0}",
            rect.Length.Value * rect.Height.Value);

        return 0;
    }
}

Voici un exemple d'exécution de l'application :

Enter the dimensions of the rectangle
Enter the length: 36.04
Enter the height: 22.86

Rectangle Characteristics
Length:    36.04
Height:    22.86
Perimeter: 117.8
Area:      823.8744
Press any key to continue . . .

Passer une structure comme argument

Comme un type de données, une structure peut être passée comme argument à une méthode. L'argument est principalement passé comme fait pour une classe. Après avoir passé l'argument, dans le corps de la méthode, vous pouvez accéder aux membres publics de la structure, en utilisant l'opérateur point. Voici un exemple :

using System;

public struct Real
{
    private double val;

    public double Value
    {
        get { return val; }
        set { val = value; }
    }

    public double Read()
    {
        return double.Parse(Console.ReadLine());
    }
}

public struct Rectangle
{
    Real len;
    Real hgt;

    public Real Length
    {
        get { return len; }
        set { len = value; }
    }

    public Real Height
    {
        get { return hgt; }
        set { hgt = value; }
    }

    public void CreateRectangle()
    {
        Real rat = new Real();

        Console.WriteLine("Enter the dimensions of the rectangle");
        len = GetLength();
        Console.Write("Enter the height: ");
        hgt.Value = rat.Read();
    }

    public Real GetLength()
    {
        Real rat = new Real();

        Console.Write("Enter the length: ");
        rat.Value = rat.Read();
        return rat;
    }
}

public class Program
{
    public static void ShowCharacteristics(Rectangle rect)
    {
        Console.WriteLine("Rectangle Characteristics");
        Console.WriteLine("Length:    {0}", rect.Length.Value);
        Console.WriteLine("Height:    {0}", rect.Height.Value);
        Console.WriteLine("Perimeter: {0}",
		(rect.Length.Value + rect.Height.Value) * 2);
        Console.WriteLine("Area:      {0}",
		rect.Length.Value * rect.Height.Value);
    }
    static int Main()
    {
        Rectangle r = new Rectangle();
        r.CreateRectangle();
        
        Console.WriteLine();
        ShowCharacteristics(r);

        return 0;
    }
}

Voici un exemple d'exécution du programme :

Enter the dimensions of the rectangle
Enter the length: 114.55
Enter the height: 82.72

Rectangle Characteristics
Length:    114.55
Height:    82.72
Perimeter: 394.54
Area:      9475.576
Press any key to continue . . .

Quand vous passez une structure à une méthode comme nous avons fait plus haut, c'est comme passer la valeur. Une copie de la valeur de la structure est passée à la méthode. Si la méthode modifie l'argument, la variable originale resterait intact. Si vous voulez que la méthode modifie la valeur de la structure, vous pouvez passer l'argument par la référence. Vous pouvez faire ceci en utilisant (les règles de) des mots-clés ref et out.

Voici un exemple qui passe une structure par la référence en utilisant le mot-clé de ref :

using System;

public struct Real
{
    private double val;

    public double Value
    {
        get { return val; }
        set { val = value; }
    }

    public double Read()
    {
        return double.Parse(Console.ReadLine());
    }
}

public struct Rectangle
{
    Real len;
    Real hgt;

    public Real Length
    {
        get { return len; }
        set { len = value; }
    }

    public Real Height
    {
        get { return hgt; }
        set { hgt = value; }
    }

    public void CreateRectangle()
    {
        Console.WriteLine("Enter the dimensions of the rectangle");
        len = GetLength();
        GetHeight(ref hgt);
    }

    public Real GetLength()
    {
        Real rat = new Real();

        Console.Write("Enter the length: ");
        rat.Value = rat.Read();
        return rat;
    }

    public void GetHeight(ref Real rl)
    {
        Real rat = new Real();

        Console.Write("Enter the height: ");
        rl.Value = rat.Read();
    }
}

public class Program
{
    static int Main()
    {
        Rectangle rect = new Rectangle();

        rect.CreateRectangle();
        Console.WriteLine();

        Console.WriteLine("Rectangle Characteristics");
        Console.WriteLine("Length:    {0}", rect.Length.Value);
        Console.WriteLine("Height:    {0}", rect.Height.Value);
        Console.WriteLine("Perimeter: {0}",
            (rect.Length.Value + rect.Height.Value) * 2);
        Console.WriteLine("Area:      {0}",
            rect.Length.Value * rect.Height.Value);

        return 0;
    }
}

Voici un exemple d'exécution du programme :

Enter the dimensions of the rectangle
Enter the length: 75.82
Enter the height: 55.64

Rectangle Characteristics
Length:    75.82
Height:    55.64
Perimeter: 262.92
Area:      4218.6248
Press any key to continue . . .
 

Précédent Copyright © 2007, Yevol