Page d'Accueil

Rangées et méthodes

 

Un membre d'une rangée comme paramètre

Chaque membre d'une rangée est considéré comme une sous-variable; c'est-à-dire, une variable de son propre chef avec une valeur. Basé sur ceci, vous pouvez passer un membre simple d'une rangée comme argument. Vous pouvez passer le nom de la variable de rangée à une méthode avec l'index l'accompagne.

Étude pratiqueÉtude pratique : Passer un membre d'une rangée comme argument

  1. Pour passer les membres d'une rangée à une méthode, accédez au fichier IceCreamOrder.cs et changez le comme suit:
     
    using System;
    
    namespace IceCream1
    {
        class IceCreamOrder
        {
            public const decimal BasePrice = 1.55M;
    
            public void ProcessAnOrder()
            {
                . . . No Change
    
                TotalPrice = (BasePrice * Scoops) + PriceIngredient;
    
                DisplayReceipt(Flavor[dFlv - 1], Container[dCont - 1],
                               Ingredient[dIngrd - 1], Scoops, TotalPrice);
            }
    
            public void DisplayReceipt(string Flv, string Cont, string Ingrd,
                int spoons, decimal TotalPrice)
            {
                Console.WriteLine("\n==================================");
                Console.WriteLine("Ice Scream Order");
                Console.WriteLine("----------------------------------");
                Console.WriteLine("Flavor:      {0}", Flv);
                Console.WriteLine("Container:   {0}", Cont);
                Console.WriteLine("Ingredient:  {0}", Ingrd);
                Console.WriteLine("Scoops:      {0}", spoons);
                Console.WriteLine("Total Price: {0:C}", TotalPrice);
                Console.WriteLine("==================================");
            }
        }
    }
  2. Exécutez l'application et l'examiner. Voici un exemple:
     
    Ice Scream Vendor Machine
    What type of flavor do you want?
    1 - Vanilla
    2 - Cream of Cocoa
    3 - Organic Strawberry
    4 - Butter Pecan
    5 - Cherry Coke
    6 - Chocolate Brownies
    Your Choice? 4
    What type of container do you want?
    1 - Cone
    2 - Cup
    3 - Bowl
    Your Choice? 1
    Do you want an ingredient or not
    1 - No Ingredient
    2 - Peanuts
    3 - M & M
    4 - Cookies
    Your Choice? 2
    How many scoops(1, 2, or 3)? 1
    
    ==================================
    Ice Scream Order
    ----------------------------------
    Flavor:      Butter Pecan
    Container:   Cone
    Ingredient:  Peanuts
    Scoops:      1
    Total Price: $2.20
    ==================================
    Press any key to continue . . .
    Ice Cream
  3. Fermer la fenêtre de DOS

Une rangée passée comme argument

Le principal but d'utiliser une rangée est l'utilisation des diverses pseudo-variables groupées sous un nom. Toujours, une rangée est principalement une variable. En tant que tels, elle peut être passée à une méthode et elle peut être retournée d'une méthode. Comme une variable régulière, une rangée peut être passée comme argument. Pour faire ceci, dans les parenthèses d'une méthode, fournissez le type de données, les crochets vides, et le nom de l'argument. Voici un exemple:

using System;

namespace ConsoleApplication1
{
    public static class Program
    {
        static void Main()
        {
        }

        static void DisplayNumber(Double[] n)
        {
        }
    }
}

Quand une rangée a été passée à une méthode, elle peut être utilisée dans le corps de la méthode pendant que n'importe quelle rangée peut être, en observant les règles des variables de rangée. Par exemple, vous pouvez afficher ses valeurs. La manière la plus simple d'utiliser une rangée est d'qfficher les valeurs de ses membres. Ceci pourrait être fait comme suit:

using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {
        }

        static void DisplayNumber(Double[] n)
        {
            for (int i = 0; i < 5; i++)
                Console.WriteLine("Number {0}: {1}", i, n[i]);
        }
    }
}

Pour appeler une méthode qui prend une rangée comme argument, dactylographiez simplement le nom de la rangée dans les parenthèses de la méthode appelée. Voici un exemple:

using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {
            Double[] number = new Double[5];

            number[0] = 12.44;
            number[1] = 525.38;
            number[2] = 6.28;
            number[3] = 2448.32;
            number[4] = 632.04;

            DisplayNumber(number);
        }

        static void DisplayNumber(Double[] n)
        {
            for (int i = 0; i < 5; i++)
                Console.WriteLine("Number {0}: {1}", i, n[i]);
        }
    }
}

Ceci produirait :

Number 0: 12.44
Number 1: 525.38
Number 2: 6.28
Number 3: 2448.32
Number 4: 632.04

Quand une rangée est passée comme argument à une méthode, la rangée est passée par la référence. Ceci signifie que, si la méthode fait n'importe quel changement à la rangée, le changement serait gardé quand la méthode sortira. Vous pouvez utiliser cette caractéristique pour initialiser une rangée d'une méthode. Voici un exemple

:

using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {
            Double[] number = new Double[5];

            InitializeList(number);
            DisplayNumber(number);
        }

        static void InitializeList(Double[] nbr)
        {
            nbr[0] = 12.44;
            nbr[1] = 525.38;
            nbr[2] = 6.28;
            nbr[3] = 2448.32;
            nbr[4] = 632.04;
	    // The array has changed
        }

        static void DisplayNumber(Double[] n)
        {
            for (int i = 0; i < 5; i++)
                Console.WriteLine("Number {0}: {1}", i, n[i]);
        }
    }
}

Notez que la méthode InitializeList() reçoit une rangée non-initialisée mais la retourne avec de nouvelles valeurs. Pour imposer le concept de passer une variable par la référence, vous pouvez également accompagner un argument de rangée du mot-clé ref, en définissant la méthode et en l'appelant. Voici un exemple:

using System;

namespace ConsoleApplication1
{
    class Program
    {

        static void Main()
        {
            Double[] number = new Double[5];

            InitializeList(ref number);
            DisplayNumber(ref number);
        }
        static void InitializeList(ref Double[] nbr)
        {
            nbr[0] = 12.44;
            nbr[1] = 525.38;
            nbr[2] = 6.28;
            nbr[3] = 2448.32;
            nbr[4] = 632.04;
        }

        static void DisplayNumber(ref Double[] n)
        {
            for (int i = 0; i < 5; i++)
                Console.WriteLine("Number {0}: {1}", i, n[i]);
        }
    }
}

Étude pratique Étude Pratique : Passer une rangée comme argument

  1. Pour utiliser des exemples de passation des rangées aux méthodes, changez le fichier IceCreamOrder.cs comme suit:
     
    using System;
    
    namespace IceCream1
    {
        class IceCreamOrder
        {
            public const decimal BasePrice = 1.55M;
    
            int ChoiceFlavor;
            int ChoiceContainer;
            int ChoiceIngredient;
            int Scoops;
            decimal TotalPrice;
    
            private string[] PrepareFlavors()
            {
                string[] Flavors = new string[10];
    
                Flavors[0] = "Vanilla";
                Flavors[1] = "Cream of Cocoa";
                Flavors[2] = "Chocolate Chip";
                Flavors[3] = "Organic Strawberry";
                Flavors[4] = "Butter Pecan";
                Flavors[5] = "Cherry Coke";
                Flavors[6] = "Chocolate Brownies";
                Flavors[7] = "Caramel Au Lait";
                Flavors[8] = "Chunky Butter";
                Flavors[9] = "Chocolate Cookie";
    
                return Flavors;
            }
    
            private void CreateIngredients(ref string[] Ingredients)
            {
                Ingredients[0] = "No Ingredient";
                Ingredients[1] = "Peanuts";
                Ingredients[2] = "M & M";
                Ingredients[3] = "Cookies";
            }
    
            private void ChooseContainer(ref string[] Containers)
            {
                Containers[0] = "Cone";
                Containers[1] = "Cup";
                Containers[2] = "Bowl";
    
                do
                {
                    try
                    {
                      Console.WriteLine("What type of container do you want?");
                        for (int i = 0; i < 3; i++)
                          Console.WriteLine("{0} - {1}", i + 1, Containers[i]);
                        Console.Write("Your Choice? ");
                        ChoiceContainer = int.Parse(Console.ReadLine());
                    }
                    catch (FormatException)
                    {
    Console.WriteLine("You must enter a valid number and no other character!");
                    }
    
                    if (ChoiceContainer < 1 || ChoiceContainer > 3)
                        Console.WriteLine("Invalid Choice - Try Again!");
                } while (ChoiceContainer < 1 || ChoiceContainer > 3);
            }
    
            private void RequestFlavor(ref string[] Flavors)
            {
                Flavors = PrepareFlavors();
    
                do
                {
                    try
                    {
                        Console.WriteLine("What type of flavor do you want?");
                        for (int i = 0; i < 10; i++)
                            Console.WriteLine("{0} - {1}", i + 1, Flavors[i]);
                        Console.Write("Your Choice? ");
                        ChoiceFlavor = int.Parse(Console.ReadLine());
                    }
                    catch (FormatException)
                    {
    Console.WriteLine("You must enter a valid number and no other character!");
                    }
    
                    if (ChoiceFlavor < 1 || ChoiceFlavor > 10)
                        Console.WriteLine("Invalid Choice - Try Again!\n");
                } while (ChoiceFlavor < 1 || ChoiceFlavor > 10);
            }
    
            private void ProcessIngredients(ref string[] Ingredients)
            {
                CreateIngredients(ref Ingredients);
    
                do
                {
                    try
                    {
                        Console.WriteLine("Do you want an ingredient or not");
                        for (int i = 0; i < 4; i++)
                         Console.WriteLine("{0} - {1}", i + 1, Ingredients[i]);
                        Console.Write("Your Choice? ");
                        ChoiceIngredient = int.Parse(Console.ReadLine());
                    }
                    catch (FormatException)
                    {
    Console.WriteLine("You must enter a valid number and no other character!");
                    }
    
                    if (ChoiceIngredient < 1 || ChoiceIngredient > 4)
                        Console.WriteLine("Invalid Choice - Try Again!");
                } while (ChoiceIngredient < 1 || ChoiceIngredient > 4);
            }
    
            private void GetTheNumberOfScoops()
            {
                do
                {
                    try
                    {
                        Console.Write("How many scoops(1, 2, or 3)? ");
                        Scoops = int.Parse(Console.ReadLine());
                    }
                    catch (FormatException)
                    {
    Console.WriteLine("You must enter a valid number and no other character!");
                    }
    
                    if (Scoops < 1 || Scoops > 3)
                        Console.WriteLine("Invalid Choice - Try Again!");
                } while (Scoops < 1 || Scoops > 3);
            }
    
            public void ProcessAnOrder()
            {
                decimal PriceIngredient, PriceScoop;
    
                string[] Flavor = new string[10];
                string[] Container = new string[3];
                string[] Ingredient = new string[4];
    
                RequestFlavor(ref Flavor);
                ChooseContainer(ref Container);
                ProcessIngredients(ref Ingredient);
                GetTheNumberOfScoops();
    
                if (ChoiceIngredient == 2 ||
    		ChoiceIngredient == 3 ||
    		ChoiceIngredient == 4)
                    PriceIngredient = 0.50M;
                else
                    PriceIngredient = 0.00M;
    
                if (Scoops == 1)
                    PriceScoop = 0.65M;
                else if (Scoops == 2)
                    PriceScoop = 1.05M;
                else
                    PriceScoop = 1.55M;
    
                Console.WriteLine("Ice Scream Vendor Machine");
    
                TotalPrice = BasePrice + PriceScoop + PriceIngredient;
    
                DisplayReceipt(ref Flavor, ref Container, ref Ingredient);
            }
    
            public void DisplayReceipt(ref string[] Flv,
    				   ref string[] Cont,
    				   ref string[] Ingrd)
            {
                Console.WriteLine("\n==================================");
                Console.WriteLine("Ice Scream Order");
                Console.WriteLine("----------------------------------");
                Console.WriteLine("Flavor:      {0}", Flv[ChoiceFlavor]);
                Console.WriteLine("Container:   {0}", Cont[ChoiceContainer]);
                Console.WriteLine("Ingredient:  {0}", Ingrd[ChoiceIngredient]);
                Console.WriteLine("Scoops:      {0}", Scoops);
                Console.WriteLine("Total Price: {0:C}", TotalPrice);
                Console.WriteLine("==================================");
            }
        }
    }       

    Exécutez l'application et l'examiner

  2. Fermez la fenêtre DOS

Renvoi d'une rangée d'une méthode

Comme une variable normale, une rangée peut être retournée d'une méthode. Ceci signifie que la méthode renverrait une variable qui porte diverses valeurs. Quand vous déclarez ou définissez la méthode, vous devez indiquer son type de données. Quand la méthode finit, elle renvoie une rangée représentée par le nom de sa variable.

Pour déclarer une méthode qui renvoie une rangée, du côté gauche du nom de la méthode, fournisez le type de valeur dans lequel on fera retourner la rangée, suivi des crochets vides. Voici un exemple :

using System;

namespace ConsoleApplication1
{
    public static class Program
    {
        static void Main()
        {
            Double[] number = new Double[5];

            DisplayNumber(number);
        }

        static Double[] InitializeList()
        {
        }

        static void DisplayNumber(Double[] n)
        {
            for (int i = 0; i < 5; i++)
                Console.WriteLine("Number {0}: {1}", i, n[i]);
        }
    }
}

Rappelez vous qu'une méthode doit toujours retourner une valeur appropriée dépendant la façon dont elle a été déclarée. Dans ce cas-ci, si elle était spécifié comme devant retourner une rangée, assurez vous qu'elle retourne une rangée et pas une variable régulière. Une manière de faire ceci est de déclarer et initialiser probablement une variable de rangée locale. Après avoir utilisé la rangée locale, vous retournez seulement son nom (sans crochets). Voici un exemple:

using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {
            Double[] number = new Double[5];

            DisplayNumber(number);
            Console.ReadLine();
        }

        static Double[] InitializeList()
        {
            Double[] nbr = new Double[5];

            nbr[0] = 12.44;
            nbr[1] = 525.38;
            nbr[2] = 6.28;
            nbr[3] = 2448.32;
            nbr[4] = 632.04;

            return nbr;
        }

        static void DisplayNumber(Double[] n)
        {
            for (int i = 0; i < 5; i++)
                Console.WriteLine("Number {0}: {1}", i, n[i]);
        }
    }
}

Quand une méthode renvoie une rangée, cette méthode peut être assignée à une rangée déclarée localement quand vous voulez l'utiliser. Rappelez vous d'initialiser une variable avec une telle méthode seulement si la variable est une rangée. Si vous initialisez une variable de rangée avec une méthode qui ne retourne pas une rangée, vous recevriez une erreur.

Voici un exemple:

#region Using directives

using System;
using System.Collections.Generic;
using System.Text;

#endregion

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Double[] number = new Double[5];

            number = InitializeList();
            DisplayNumber(number);
            
            Console.ReadLine();
        }

        static Double[] InitializeList()
        {
            Double[] nbr = new Double[5];

            nbr[0] = 12.44;
            nbr[1] = 525.38;
            nbr[2] = 6.28;
            nbr[3] = 2448.32;
            nbr[4] = 632.04;

            return nbr;
        }

        static void DisplayNumber(Double[] n)
        {
            Console.WriteLine("List of Numbers");
            for (int i = 0; i < 5; i++)
                Console.WriteLine("Number {0}: {1}", i, n[i]);
        }
    }
}

Étude pratique Étude Pratique : Renvoi d'une rangée d'une méthode

  1. Pour appliquez un exemple de renvoie d'une rangée d'une méthode, et pour compléter cet exercice, changez le fichier IceCreamOrder.cs comme suit:
     
    using System;
    
    namespace IceCream1
    {
        class IceCreamOrder
        {
            public const decimal BasePrice = 1.55M;
    
            int ChoiceFlavor;
            int ChoiceContainer;
            int ChoiceIngredient;
            int Scoops;
            decimal TotalPrice;
    
            private string[] PrepareFlavors()
            {
                string[] Flavors = new string[10];
    
                Flavors[0] = "Vanilla";
                Flavors[1] = "Cream of Cocoa";
                Flavors[2] = "Chocolate Chip";
                Flavors[3] = "Organic Strawberry";
                Flavors[4] = "Butter Pecan";
                Flavors[5] = "Cherry Coke";
                Flavors[6] = "Chocolate Brownies";
                Flavors[7] = "Caramel Au Lait";
                Flavors[8] = "Chunky Butter";
                Flavors[9] = "Chocolate Cookie";
    
                return Flavors;
            }
    
            private void CreateIngredients(ref string[] Ingredients)
            {
                Ingredients[0] = "No Ingredient";
                Ingredients[1] = "Peanuts";
                Ingredients[2] = "M & M";
                Ingredients[3] = "Cookies";
            }
    
            private void ChooseContainer(ref string[] Containers)
            {
                Containers[0] = "Cone";
                Containers[1] = "Cup";
                Containers[2] = "Bowl";
    
                do
                {
                    try
                    {
                      Console.WriteLine("What type of container do you want?");
                        for (int i = 0; i < 3; i++)
                          Console.WriteLine("{0} - {1}", i + 1, Containers[i]);
                        Console.Write("Your Choice? ");
                        ChoiceContainer = int.Parse(Console.ReadLine());
                    }
                    catch (FormatException)
                    {
    Console.WriteLine("You must enter a valid number and no other character!");
                    }
    
                    if (ChoiceContainer < 1 || ChoiceContainer > 3)
                        Console.WriteLine("Invalid Choice - Try Again!");
                } while (ChoiceContainer < 1 || ChoiceContainer > 3);
            }
    
            private void RequestFlavor(ref string[] Flavors)
            {
                Flavors = PrepareFlavors();
    
                do
                {
                    try
                    {
                        Console.WriteLine("What type of flavor do you want?");
                        for (int i = 0; i < 10; i++)
                            Console.WriteLine("{0} - {1}", i + 1, Flavors[i]);
                        Console.Write("Your Choice? ");
                        ChoiceFlavor = int.Parse(Console.ReadLine());
                    }
                    catch (FormatException)
                    {
    Console.WriteLine("You must enter a valid number and no other character!");
                    }
    
                    if (ChoiceFlavor < 1 || ChoiceFlavor > 10)
                        Console.WriteLine("Invalid Choice - Try Again!\n");
                } while (ChoiceFlavor < 1 || ChoiceFlavor > 10);
            }
    
            private void ProcessIngredients(ref string[] Ingredients)
            {
                CreateIngredients(ref Ingredients);
    
                do
                {
                    try
                    {
                        Console.WriteLine("Do you want an ingredient or not");
                        for (int i = 0; i < 4; i++)
                        Console.WriteLine("{0} - {1}", i + 1, Ingredients[i]);
                        Console.Write("Your Choice? ");
                        ChoiceIngredient = int.Parse(Console.ReadLine());
                    }
                    catch (FormatException)
                    {
    Console.WriteLine("You must enter a valid number and no other character!");
                    }
    
                    if (ChoiceIngredient < 1 || ChoiceIngredient > 4)
                        Console.WriteLine("Invalid Choice - Try Again!");
                } while (ChoiceIngredient < 1 || ChoiceIngredient > 4);
            }
    
            private void GetTheNumberOfScoops()
            {
                do
                {
                    try
                    {
                        Console.Write("How many scoops(1, 2, or 3)? ");
                        Scoops = int.Parse(Console.ReadLine());
                    }
                    catch (FormatException)
                    {
    Console.WriteLine("You must enter a valid number and no other character!");
                    }
    
                    if (Scoops < 1 || Scoops > 3)
                        Console.WriteLine("Invalid Choice - Try Again!");
                } while (Scoops < 1 || Scoops > 3);
            }
    
            public void ProcessAnOrder()
            {
                decimal PriceIngredient, PriceScoop;
    
                string[] Flavor = new string[10];
                string[] Container = new string[3];
                string[] Ingredient = new string[4];
    
                RequestFlavor(ref Flavor);
                ChooseContainer(ref Container);
                ProcessIngredients(ref Ingredient);
                GetTheNumberOfScoops();
    
                if (ChoiceIngredient == 2 ||
    		ChoiceIngredient == 3 ||
    		ChoiceIngredient == 4)
                    PriceIngredient = 0.50M;
                else
                    PriceIngredient = 0.00M;
    
                if (Scoops == 1)
                    PriceScoop = 0.65M;
                else if (Scoops == 2)
                    PriceScoop = 1.05M;
                else
                    PriceScoop = 1.55M;
    
                Console.WriteLine("Ice Scream Vendor Machine");
    
                TotalPrice = BasePrice + PriceScoop + PriceIngredient;
    
                DisplayReceipt(ref Flavor, ref Container, ref Ingredient);
            }
    
            public void DisplayReceipt(ref string[] Flv,
    				   ref string[] Cont,
    				   ref string[] Ingrd)
            {
                Console.WriteLine("\n==================================");
                Console.WriteLine("Ice Scream Order");
                Console.WriteLine("----------------------------------");
                Console.WriteLine("Flavor:      {0}", Flv[ChoiceFlavor]);
                Console.WriteLine("Container:   {0}", Cont[ChoiceContainer]);
                Console.WriteLine("Ingredient:  {0}", Ingrd[ChoiceIngredient]);
                Console.WriteLine("Scoops:      {0}", Scoops);
                Console.WriteLine("Total Price: {0:C}", TotalPrice);
                Console.WriteLine("==================================");
            }
        }
    }
  2. Exécutez l'application et l'examiner. Voici un exemple :
     
    What type of flavor do you want?
    1 - Vanilla
    2 - Cream of Cocoa
    3 - Chocolate Chip
    4 - Organic Strawberry
    5 - Butter Pecan
    6 - Cherry Coke
    7 - Chocolate Brownies
    8 - Caramel Au Lait
    9 - Chunky Butter
    10 - Chocolate Cookie
    Your Choice? 9
    What type of container do you want?
    1 - Cone
    2 - Cup
    3 - Bowl
    Your Choice? 2
    Do you want an ingredient or not
    1 - No Ingredient
    2 - Peanuts
    3 - M & M
    4 - Cookies
    Your Choice? 3
    How many scoops(1, 2, or 3)? 2
    Ice Scream Vendor Machine
    
    ==================================
    Ice Scream Order
    ----------------------------------
    Flavor:      Chocolate Cookie
    Container:   Bowl
    Ingredient:  Cookies
    Scoops:      2
    Total Price: $3.10
    ==================================
    Press any key to continue . . .
    Ice Cream
  3. Fermez la fenêtre DOS
 

Précédent Copyright © 2007 Yevol Suivant