Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Передача аргументов из класса


Автор: ДобренькийПапаша 3.8.2008, 14:50
Хочу работать со всеми переменными из класса values в классе Game, конкретно, например хочу передать все массивы в функцию comp. Менять private на public не хочу!!! Как сделать?

Код

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

namespace _21Point
{
    public class values
    {
        private int counter;
        private int label;
        private int[] cards=new int[52];
        private int[] compcards = new int[5];
        private int[] usercards = new int[5];
        private int[] bcards = new int[10];
        public void val()
        {
            this.counter=2;
            this.label = 3;
            for (int i = 0; i < bcards.Length; i++)
            {                                       //Constructor
                bcards[i] = 0;
            }
            for (int i = 0; i < cards.Length; i++)
            {
               
                cards[i] += counter;
                if (i == label)
                {
                    counter += 1;
                    label += 4;
                }
            }
            for (int i = 0; i < cards.Length; i++)
            {                                       //Constructor
                Console.Write("{0},", cards[i]);
            }
        }
     }

    class Game
    {
      
        public void Comp()
        {
            
        }   
        
        public static void Main()
        {
            values ex=new values();
            ex.val();
        }
    }
}

Автор: mrHunter 3.8.2008, 15:49
Выход в использовании свойств. Прочитай о них в книге.

Автор: 1stain 3.8.2008, 16:55
создай в классе Game делегат и передавай его в класс Values:
Код

    public class Values
    {
        private int counter;
        private int label;
        private int[] cards = new int[52];
        private int[] compcards = new int[5];
        private int[] usercards = new int[5];
        private int[] bcards = new int[10];

        public void val()
        {
            this.counter = 2;
            this.label = 3;
            for (int i = 0; i < bcards.Length; i++)
            {                                       //Constructor
                bcards[i] = 0;
            }
            for (int i = 0; i < cards.Length; i++)
            {

                cards[i] += counter;
                if (i == label)
                {
                    counter += 1;
                    label += 4;
                }
            }
            for (int i = 0; i < cards.Length; i++)
            {                                       //Constructor
                //Console.Write("{0},", cards[i]);
            }
        }

        public void ProcessDelegate(Delegate del)
        {
            List<int[]> delegateParameter = new List<int[]>();
            delegateParameter.Add(this.cards);

            del.DynamicInvoke( delegateParameter );
        }

        public void PrintCards()
        {
            foreach (int card in cards)
            {
                Console.WriteLine(card);
            }
        }
    }

    class Game
    {
        public delegate void CompDelegate(List<int[]> intArrays);
        public void Shuffle( List<int[]> intArrays)
        {
            for (int i = 0; i < intArrays.Count; i++)
    {
                // Здесь твой алгоритм перемешивания колоды
                for (int j = 0; j < intArrays[i].Length; j++)
                {
                    intArrays[i][j] = 0;
                }
    } 
        }

        public static void Main()
        {
            Values ex = new Values();
            ex.val();
            ex.PrintCards();
            Console.ReadLine();

            Game g = new Game();
            Game.CompDelegate comp = new Game.CompDelegate(g.Shuffle);
            ex.ProcessDelegate(comp);

            ex.PrintCards();
        }
    }

Автор: mr.DUDA 3.8.2008, 23:39
Три варианта:
1) сделать поля класса values с модификатором internal
2) вложить класс Game в класс values
3) добавить в класс values public-свойства только для чтения, возвращающие поля

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)