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

Разделение данных между потоками (теория)

05.06.2015, 09:57. Показов 2039. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите понять что такое разделение данных между потоками. Изучаю статью "Работа с потоками C#"
Вот код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class ThreadTest 
{
  bool done;
  
  static void Main()
  {
    ThreadTest tt = new ThreadTest(); // Создаем общий объект
    new Thread(tt.Go).Start();
    tt.Go();
  }
  
  // Go сейчас – экземплярный метод
  void Go() 
  {
    if (!done) { done = true; Console.WriteLine("Done"); }
  }
}
Я не могу понять как такое вообще может быть, что я создаю экземпляр класса ThreadTest в самом классе ThreadTest.
Поясните пожалуйста как такое может быть? Это что у меня два метода Main получится?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.06.2015, 09:57
Ответы с готовыми решениями:

Передача данных между потоками
Изучаю многопоточные приложения. Есть 2 потока, в основном окне есть поле ввода, надо как-то...

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

Передача данных между потоками
Подскажите пожалуйста как передать объект между потоками через сигнал-слот? у меня выдает следующее...

Обмен данных между потоками
Имеется 2 потока (основной и рабочий) В рабочем потоке появляется строка, которая должна...

9
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
05.06.2015, 10:04 2
Цитата Сообщение от Shoorup_SCBist Посмотреть сообщение
как такое вообще может быть
А почему нет?
Цитата Сообщение от Shoorup_SCBist Посмотреть сообщение
у меня два метода Main получится?
С чего бы? Метод Main() - статический, работает на уровне типа, а не на уровне объекта.

Добавлено через 2 минуты
Цитата Сообщение от Shoorup_SCBist Посмотреть сообщение
я создаю экземпляр класса ThreadTest в самом классе ThreadTest.
Такое не запрещено, примерно на этом принципе и работает, в частности, паттерн Singletone (Одиночка).
Закрытый конструктор и статический метод (свойство), возвращающее созданный экземпляр этого класса, если он равен null) или уже созданный ранее.
1
11 / 11 / 0
Регистрация: 16.09.2013
Сообщений: 75
05.06.2015, 10:19  [ТС] 3
Моск где-то немного поломался Надеюсь полное понимание придет когда-нибудь.

Я все равно не понял как это метод Main() работает на уровне типа, а не на уровне объекта. Есть шаткое подозрение что я недопонимаю, что такое static...
0
109 / 50 / 55
Регистрация: 17.09.2013
Сообщений: 298
05.06.2015, 10:53 4
Модификатор static означает, что будь то метод/переменная, он/она будут работать в пределах класса. Обращение к ним происходит через имя класса. В то время как обращение к обычным методам происходит напрямую через объект класса. Яркий пример статических методов:
C#
1
2
Math.Sqrt()
Math.Pow()
При этом сам класс Math является статическим. А это означает, что экземпляров такого класса создать нельзя!
C#
1
Math m = new Math();
Т.е. данная операция невозможна.
0
146 / 143 / 32
Регистрация: 21.01.2012
Сообщений: 545
05.06.2015, 10:55 5
Shoorup_SCBist,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
        private class A
        {
            public static void Static(){}
            public void NonStatic(){}
        }
 
        private static void Main(){
            A.Static(); // можно
            A.NonStatic(); //Ошибка- вызов нестатического метода через имя типа
            A example = new A(); //Создаем экземпляр класса А - это уже не тип
            example.NonStatic(); //можно
            example.Static(); //нельзя - статический метод вызывается по имени типа
        }
2
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
05.06.2015, 12:00 6
Цитата Сообщение от KeBJIaP Посмотреть сообщение
Ошибка- вызов нестатического метода через имя типа
KeBJIaP, можно даже заставить работать вызов экземплярного метода через нулевую ссылку)))
К примеру, вот такой код (именно в таком его написании) при определенных манипуляциях можно заставить работать (хотя в реальности выбрасывается NullReferenceException).
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Test_1 {
    class A {
        public static void StaticMethod() {
            Console.WriteLine("In static method!");
        }
        public void NonStaticMethod() {
            Console.WriteLine("In non-static method!");
        }
    }
    class Program {
        static void Main(string[] args) {
            A.StaticMethod();
            A a = null;
            a.NonStaticMethod();
            ((A)null).NonStaticMethod();
            Console.ReadLine();
        }
    }
}
1
146 / 143 / 32
Регистрация: 21.01.2012
Сообщений: 545
05.06.2015, 12:28 7
insite2012, при желании можно сделать много разных глупостей)
C#
1
2
3
4
5
            A.StaticMethod();
            A a = new A();
            a.NonStaticMethod();
            a.GetType().GetMethod("StaticMethod").Invoke(a,null);
            Console.ReadLine();
0
11 / 11 / 0
Регистрация: 16.09.2013
Сообщений: 75
05.06.2015, 13:12  [ТС] 8
Со static вроде понял. Но тогда не до конца понимаю, что такое "тип". Не я догадываюсь, что имя класса... но не понимаю...
0
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
05.06.2015, 13:54 9
Цитата Сообщение от KeBJIaP Посмотреть сообщение
много разных глупостей)
Это не так интересно))) А вот вызов экземплярного метода на нулевой ссылке - уже немного повеселее)

Добавлено через 2 минуты
Цитата Сообщение от Shoorup_SCBist Посмотреть сообщение
не до конца понимаю, что такое "тип".
Выражаясь совсем просто - это описание, шаблон, на основе которого будут созданы объекты.
А что касается вызовом статических методов и экземплярных - тут уже двумя словами не обойдешься.
0
146 / 143 / 32
Регистрация: 21.01.2012
Сообщений: 545
05.06.2015, 14:03 10
Shoorup_SCBist,
C#
1
2
3
4
5
Class A{} //Это ТИП, имя типа А
 
A a = new A();//Это ЭКЗЕМПЛЯР класса А
static class B{} //Это ТИП по имени В, он статический и поэтому нельзя создать его экземпляр
B b = new B(); //Ошибка
1
05.06.2015, 14:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.06.2015, 14:03
Помогаю со студенческими работами здесь

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

Разделение данных между пользователями БД. Назначение нормы обработки данных в день
Добрый день уважаемые форумчане! Столкнулась с острой необходимость реализовать следующее: ...

Безопасная передача данных между потоками
У меня есть два класса (описаны в разных файлах). В классе1 есть массив, который я хочу передать...

Передача данных между потоками/процессами
Ребят, у вас тут поактивнее раздел. В соседней ветке .NET я не нашел решения, может...


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

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