Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/55: Рейтинг темы: голосов - 55, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 12.04.2014
Сообщений: 33
1

Как передать значение локальной переменной в другой класс? (схема внутри)

09.04.2016, 03:43. Показов 11077. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста, по-человечески прошу (КОДОМ)
я понимаю всё, но я не знаю как это реализовать с помощью кода
А через метод meth никак
Там итак в оригинале один параметр, и если поменяешь, то всё через ж пойдет
Примерно такая схема всей проги
Я передала значение лок. переменной полю, но ничего не выводится!

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System;
namespace Console
{
    class  class1    
    {
        public string data;                //поле с переменной
        public class1()
         {
                Console.WriteLine("bbb");
          }
 
        public void meth() //конструктор класса
        {
            string name1="aaa";    //ВОТ ЭТУ ПЕРЕМННУЮ НУЖНО ОТОБРАЗИТЬ В class2   
            this.name =name1
           Console.WriteLine(name);
        }
    }
 
    class Class2
    {
        static void Main()
        {
            class1 X = new Class();
            X.meth();
 
            Console.Read();
        }
 
       
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.04.2016, 03:43
Ответы с готовыми решениями:

как передать значение переменной которую я вводил в одном классе в другой класс (ввожу я в консоле)
class Registracia { public void Sakas() { Console.Write("Вес...

Как передать значение элемента массива в другой класс
Добрый день, учусь на программиста. как передать значение элемента массива из класса в класс? ...

Как передать значение переменной из класса Program в свой созданный класс?
Нужно передать значение вводимой в консоли переменной в класс, который сам создал Как это можно...

Передать значение переменной другой программе
Здравствуйте, мне нужно передать значение переменной в другую программу. Знаю что нужно это...

9
8940 / 4852 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
09.04.2016, 04:19 2
Лучший ответ Сообщение было отмечено AnnGush как решение

Решение

Успокойся и посмотри на код ещё раз. Поле у тебя называется data, в методе meth ты записываешь переменную name1 в поле или свойство name класса class1
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class class1 
{
    public string data; //поле с переменной
    public class1()//Вот это конструктор класса
    {
        Console.WriteLine("bbb");
    }
 
    public void meth() //А это метод класса
    {
        //Эта переменная объявлена внутри метода и извне не доступна
        string name1="aaa"; //ВОТ ЭТУ ПЕРЕМННУЮ НУЖНО ОТОБРАЗИТЬ В class2 
        //В классе class1 нет ни поля ни свойства с именем name
        this.name =name1
        Console.WriteLine(name);
    }
}
 
class Class2
{
    static void Main()
    {
        class1 X = new Class();
        X.meth();
        //Вот здесь ты можешь получить значение поля из класса
        Console.WriteLine(X.data);
        Console.Read();
    }
поэтому скорее всего метод meth изменить так:
C#
1
2
3
4
5
6
7
8
public void meth() //А это метод класса
{
    //Эта переменная объявлена внутри метода и извне не доступна
    string name1="aaa"; //ВОТ ЭТУ ПЕРЕМННУЮ НУЖНО ОТОБРАЗИТЬ В class2 
    //В классе class1 нет ни поля ни свойства с именем name
    this.data =name1
    Console.WriteLine(data);
}
1
116 / 115 / 64
Регистрация: 03.06.2013
Сообщений: 582
09.04.2016, 11:24 3
AnnGush,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Helper1
{
    class Program
    {
        static void Main(string[] args)
        {
            B classB = new B();
            Console.WriteLine(classB.Data);
            Console.ReadLine();
        }
    }
 
    class A
    {
        public string Data { get; set; }
        public A()
        {
            Data = "Тут какое-то значение"; //Эту переменную будем передавать
            Console.WriteLine("Конструктор калсса А : Data = {0}", Data);
        }
    }
    class B
    {
        public string Data; // будет хранить переменную из класса А
 
        public B()
        {
            A classA = new A();
            Data = classA.Data;
        }
    }
}
0
2354 / 1772 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
09.04.2016, 15:15 4
Цитата Сообщение от AnnGush Посмотреть сообщение
я понимаю всё
вы метод называете конструктором класса, а в самом конструкторе пишете какойто бред
пока что вы ничего не понимаете
Цитата Сообщение от AnnGush Посмотреть сообщение
C#
1
class1 X = new Class();
это что за инициализация экземпляра такая? не видел ничего такого никогда
Отобразил вашу переменную в другом классе. Тут правда стоит вопрос зачем все это, но вы наверное разберетесь
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Collections;
 
namespace TestConsoleProjectForAll
{
    class Program
    {
        static void Main(string[] args)
        {
            class1 X = new class1();
            string res = X.meth();//получаем вашу переменную name1
            Console.WriteLine(res);//выводим полученнй результат
        }
    }
 
    class class1
    {
        public string data;                //поле с переменной //это просто поле, это не переменная
        public class1()//это конструктор
        {
            Console.WriteLine("bbb");//это какойто бред
        }
 
        public string meth() //конструктор класса //это метод, а не конструктор
        {
            string name1 = "aaa";    //ВОТ ЭТУ ПЕРЕМННУЮ НУЖНО ОТОБРАЗИТЬ В class2
            return name1; //отображаем в другом классе
        }
    }
}
0
0 / 0 / 0
Регистрация: 12.04.2014
Сообщений: 33
10.04.2016, 00:36  [ТС] 5
Спасибо, но фишка в том, что вместо конструкторов класса A и B у меня методы))
и если заменить конструкторы методами, как у меня в проге, то ничего не выводится
и у меня еще метод такой (RecieveCallBack), который не получается сделать string вместо void
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Helper1
{
    class Program
    {
        static void Main(string[] args)
        {
            B classB = new B();
            Console.WriteLine(classB.Data);
            Console.ReadLine();
        }
    }
 
    class A
    {
        public string Data { get; set; }
        public void Am()
        {
            Data = "Тут какое-то значение"; //Эту переменную будем передавать
            Console.WriteLine("Конструктор калсса А : Data = {0}", Data);
        }
    }
    class B
    {
        public string Data; // будет хранить переменную из класса А
 
        public void Bm()
        {
            A classA = new A();
            Data = classA.Data;
        }
    }
}
0
8940 / 4852 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
10.04.2016, 00:54 6
Цитата Сообщение от AnnGush Посмотреть сообщение
Спасибо, но фишка в том, что вместо конструкторов класса A и B у меня методы))
Т.е. конструкторы просто не указаны. Это допускается. Будет вызываться конструктор по умолчанию
Попробуй так:
C#
1
2
3
4
5
6
7
8
static void Main(string[] args)
{
    B classB = new B();
    //Теперь нужно выполнить метод Bm или си-бемоль минор
    classB.Bm();
    Console.WriteLine(classB.Data);
    Console.ReadLine();
}
0
Эксперт .NET
6452 / 4053 / 1599
Регистрация: 09.05.2015
Сообщений: 9,486
10.04.2016, 00:55 7
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Helper1
{
    class Program
    {
        static void Main(string[] args)
        {
            B classB = new B();
            classB.Bm();
            Console.WriteLine(classB.Data);
            Console.ReadLine();
        }
    }
 
    class A
    {
        public string Data { get; set; }
        public void Am()
        {
            Data = "Тут какое-то значение"; //Эту переменную будем передавать
            Console.WriteLine("Конструктор калсса А : Data = {0}", Data); // в каком месте это конструктор не понятно, обычный метод же...
        }
    }
    class B
    {
        public string Data; // будет хранить переменную из класса А
 
        public void Bm()
        {
            A classA = new A();
            classA.Am();
            Data = classA.Data;
        }
    }
}
0
0 / 0 / 0
Регистрация: 12.04.2014
Сообщений: 33
10.04.2016, 01:08  [ТС] 8
Спасибо, но насчет того - зачем...(
у меня серверное приложение, оно принимает данные с 514 порта
и эти принятые данные нужно отобразить в другом классе
но метод, где они находятся не поддается изменению (я не могу сделать void - string) и через this не получается

вот полный код проги
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
using System;
using System.IO;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Text.RegularExpressions;
using System.Linq;
using System.Threading;
 
 
namespace SyslogReader
{
     public class StateObject //класс для хранения принятых байт
    {
        public byte[] buffer; //массив принимаемых байт
        public int BufferSize = 4096; //максимальный размер буфера
        public Socket workSocket; //переменная
 
        public StateObject() //метод
        {
            buffer = new byte[BufferSize]; 
        }
    }
 
    public class CAA
    {
        private readonly IPAddress Target_IP; //поле целевой ip адрес
        private readonly int Target_Port; //поле целевой порт
 
        private readonly Socket UDPSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); //конструктор
        //протокол передачи - UDP,      
        //AddressFamily.InterNetwork - возвращаем адреса, исп-ые сокетом, IPv4
        //SocketType.Dgram - получаем датаграммы по UDP
        public Queue<string> MessageQueue { get; private set; } //очередь сообщений
      
        public CAA(string ipOfYourPC, int portNumber) //конструктор класса CAA с параметрами - ip адрес и номер порта
        {
            Target_IP = IPAddress.Parse(ipOfYourPC); //переменная
            Target_Port = portNumber; //переменная
            MessageQueue = new Queue<string>();
 
            var localHostIpEnd = new IPEndPoint(IPAddress.Any, Target_Port);
            UDPSocket.SetSocketOption(SocketOptionLevel.Udp, SocketOptionName.NoDelay, 1);
            UDPSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
            UDPSocket.Bind(localHostIpEnd);
            UDPSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 0);
            Console.WriteLine("Starting Recieve");
            Recieve();
        }
 
        private void Recieve()
        {
            var LocalIPEndPoint = new IPEndPoint(IPAddress.Any, Target_Port);
            EndPoint LocalEndPoint = LocalIPEndPoint;
            StateObject state = new StateObject();
            state.workSocket = UDPSocket;
            Console.WriteLine("Begin Recieve");
            Console.WriteLine("-------------");
            UDPSocket.BeginReceiveFrom(state.buffer, 0, state.BufferSize, 0, ref LocalEndPoint, new AsyncCallback(ReceiveCallback), state);
        }
 
 
       public void ReceiveCallback(IAsyncResult ar) //метод для асинхронной передачи
        {
            var LocalIPEndPoint = new IPEndPoint(IPAddress.Any, Target_Port);
            EndPoint LocalEndPoint = LocalIPEndPoint;
            StateObject state = (StateObject)ar.AsyncState;
            Socket client = state.workSocket;
            var bytesRead = client.EndReceiveFrom(ar, ref LocalEndPoint);
 
            client.BeginReceiveFrom(state.buffer, 0, state.BufferSize, 0, ref LocalEndPoint, new AsyncCallback(ReceiveCallback), state);
            
           string data = Encoding.Default.GetString(state.buffer, 0, state.BufferSize).Replace("\0", "");//ВОТ ЭТА ПЕРЕМЕННАЯ[/COLOR][/COLOR]
 
            MessageQueue.Enqueue(data); //запихиваем в очередь
        }
    }
 
    internal class Program
    {
        static void Main(string[] args) //
        {
        var caa = new CAA("192.168.0.101", 514);
 
            [B]//хотя бы пусть здесь отобразится[/B]
        while (true) //пока условие верно
        {
            while (caa.MessageQueue.Any()) //пока в очереди есть сообщения
            {
                Console.WriteLine(caa.MessageQueue.Dequeue()); //выводим очередь сообщений с данными
                Console.WriteLine("-------------------------------");
            }
 
            Thread.Sleep(0); //ждем
        }          
            Console.Read(); //чтоб консолька не закрылась
        }
    }
}
0
8940 / 4852 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
10.04.2016, 01:28 9
Принятые данные находятся в очереди. Оттуда их и бери. Они же выводятся в консоль
0
0 / 0 / 0
Регистрация: 12.04.2014
Сообщений: 33
10.04.2016, 01:42  [ТС] 10
Просто на шаблоне если сделать как Вы сказали через методы - то переменная передаётся
но этот вреднючий RecieveCallback(... ar) даже вызвать в другом классе из-за (... ar) не получается
А через очередь получается эти данные использовать в другом классе
но так можно делать?
а то мне казалось, что это неправильно))
0
10.04.2016, 01:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.04.2016, 01:42
Помогаю со студенческими работами здесь

Как изменять значение переменной bool, который находится в объекте, если я его передал в другой класс
У меня есть статический объект Vars.MainConfig и в нем есть 2 bool Vars.MainConfig.Hello и...

Перекинуть значение переменной в другой класс
Вот код: void Form1_SizeChanged(object sender, EventArgs e) { ...

Как присвоить значение переменной, исходя из значения другой переменной?
Всем привет. Нужна помощь. Есть переменная, например &quot;month&quot; которая может принимать значения...

Как избежать изменения одной переменной ссылочного типа, когда изменяется значение другой переменной
Подскажите, пожалуйста, как избежать изменения одной переменной ссылочного типа, когда изменяется...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru