Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
3 / 3 / 2
Регистрация: 25.12.2013
Сообщений: 86
1

Как добраться к методу из другого класса

22.08.2014, 21:07. Просмотров 884. Ответов 9
Метки нет (Все метки)

В первом классе происходит загрузка данных и работа с ними.
Весь набор методов, который берет эти данные и уже работает вынесен в отдельный класс для последующего подключения данного класса и работы в других приложениях.
Вот, допустим мне надо добраться до метода из 1 класса, который останавливает работу потоков путём перебора их в списке и применяя к каждому Abort. Конечно, можно в каждом методе второго класса сделать в возвращаемых значениях статусы и потом в первом методе написать, что
C#
1
if(s = "bad_proxy" || s = "bad_login"|| s = "very_bad" и т.д.)? this.StopProgamm()
но предполагаю, что это не верный вариант.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.08.2014, 21:07
Ответы с готовыми решениями:

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

Как реализовать доступ к методу из другого класса?
Народ, как вообще правильно обращаться к методу из другого класса? Есть две формы. Form1 выводит...

Как получить доступ к методу из другого класса?
public partial class Form1 : Form { private void button1_Click(object sender,...

Как обратиться к методу из другого метода внутри одного и того же класса
Доброго времени суток. Продолжаю изучение C#, и вот моя третья тема (или четвертая, за сегодня) с...

9
Модератор
Эксперт .NET
5087 / 3993 / 1148
Регистрация: 12.10.2013
Сообщений: 11,616
Записей в блоге: 2
22.08.2014, 21:30 2
mandyson, все возможно, но лучше бы вы показали свой код... Чтобы не гадать...
0
3 / 3 / 2
Регистрация: 25.12.2013
Сообщений: 86
23.08.2014, 02:06  [ТС] 3
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
namespace Primer
{
public partial class Form1 : Form
List<string> list_accounts = new List<string>();
List<string> list_proxy = new List<string>();
 List<Thread> list_threads = new List<Thread>();
 
 public void LoadData()
{
list_accounts.AddRange(File.ReadAllLines("acc.txt"));
list_accounts.AddRange(File.ReadAllLines("proxy.txt"));
}
private void btnStart_Click(object sender, EventArgs e)
      {
              LoadData();
              Thread th = new Thread(StartProgramm);
              list_threads.Add(th);
              th.IsBackground = true;
              th.Start();  
      }
public void StartProgram(){
Class2 class2 = new Class2();
bool status = Class2.Work(list_account[0],list_proxy[0]);
}
public void StopProgram(){
   for (int x = list_threads.Count; x > 0; --x)
          {
              list_threads[x - 1].Abort();
          }
}
}
}
namespace Primer
{
public class Class2{
 
bool status work;
 
public bool Work(string account, string proxy){
много строчек кода
выпадает исключение - не верный пасс к прокси
retun work = false;   - здесь надо обратиться к StopProgram() и закончить программу 
много строчек кода
retun work = true;
}
}
}
Добавлено через 3 часа 7 минут
Цитата Сообщение от insite2012 Посмотреть сообщение
mandyson, все возможно, но лучше бы вы показали свой код... Чтобы не гадать...
весь код не могу, т.к. его много, а вот тут постарался этот момент выделить.
Главная задача свободно обмениваться данными между не статическими методами в классах.
Как мне представляется это возможно сделать через делегаты, но тема мной пока освоена плохо.
0
864 / 714 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
23.08.2014, 02:15 4
mandyson,
Всю логику стоит отделять от интерфейса.
Создаете объект Form1 (но вообще логику выносим), и вызываем StopProgram
0
Модератор
Эксперт .NET
5087 / 3993 / 1148
Регистрация: 12.10.2013
Сообщений: 11,616
Записей в блоге: 2
23.08.2014, 09:18 5
Цитата Сообщение от XRoy Посмотреть сообщение
Всю логику стоит отделять от интерфейса.
Полностью согласен. Это допустимо в маленьких тестовых проектах, а в больших-запутаешься. Форма остается только визуальной частью, вся логика в классах. Для связи можно использовать события /static класс.
0
3 / 3 / 2
Регистрация: 25.12.2013
Сообщений: 86
23.08.2014, 17:55  [ТС] 6
Цитата Сообщение от insite2012 Посмотреть сообщение
Для связи можно использовать события /static класс.
можно примерчик?
0
Модератор
Эксперт .NET
5087 / 3993 / 1148
Регистрация: 12.10.2013
Сообщений: 11,616
Записей в блоге: 2
23.08.2014, 17:58 7
Цитата Сообщение от mandyson Посмотреть сообщение
можно примерчик?
Да можно, конечно, хотя их тут на форуме over100500... Для начала посмотрите в ответах по WinForm, там есть примеры... Если не найдете ничего полезного - сделаю пример.
0
Заблокирован
24.08.2014, 01:08 8
Я как выучил как писать события уже везде их сую куда нужно и нет. Вот пример

Добавлено через 52 секунды
Очень хорошая штука для таких ситуевин. Сам по началу мудрил с передачей в конструктор второго класса обьект первого но это вызывало у меня дикое отвращение
1
3 / 3 / 2
Регистрация: 25.12.2013
Сообщений: 86
01.11.2014, 18:51  [ТС] 9
Да можно, конечно, хотя их тут на форуме over100500... Для начала посмотрите в ответах по WinForm, там есть примеры... Если не найдете ничего полезного - сделаю пример.
Немного отходил от темы, но вынужден апнуть, т.к. всё еще не решил данный вопрос.
Вот к примеру код(никадал вчера), который позволяет из одного класса вызывать метод другого посредством делегата. В данном случае идет обращение из главной формы к классу, принимающий наш делегат, а тот в своб очередь ссылается на метод в главной форме, который записывает строку в textBox.
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
using System;
using System.Windows.Forms;
 
namespace DelLesson
{
    public delegate void BaseDel(string message);
    public partial class Form1 : Form
    {
 
        public static string s; 
 
        public Form1()
        {
            InitializeComponent();
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
 
            SomeClass sc = new SomeClass(); 
 
            BaseDel baseDel = new BaseDel(log);
 
            sc.textAdder(baseDel);
            
            
        }
 
        public void log(string mes)
        {
            textBox1.AppendText(s);
          
        }
    }
 
 
    class SomeClass 
    {
 
        public void textAdder(BaseDel sd)
        {
           sd(Form1.s = "33");
           
 
        }
    }
}
А вот что делать, если нам нужно наоборот из класса SomeClass сделать вызов метода, но при этом нельзя создать экземпляр класса Form1?
Как был пост ниже по всей видимости нужно ввести событие, где издателем будет второй класс, а подписчиком наша форма, но как это всё грамотно записать?)
0
Модератор
Эксперт .NET
5087 / 3993 / 1148
Регистрация: 12.10.2013
Сообщений: 11,616
Записей в блоге: 2
01.11.2014, 18:57 10
mandyson, тут посмотрите.
Ответы на 7 самых частых вопросов по WinForms
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.11.2014, 18:57

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Ошибка при обращении из одного класса к методу другого класса
Структура проекта, 2 класса: класс графики MainWindow класс логики Сannibals при обращении из...

Разрешить доступ к методу класса только для другого класса
Здравствуйте, нужно что бы у Item ссылка на Box была только для чтения, но при добавлении Item в...

Обратиться из класса к методу другого класса
Доброе время суток коллеги есть вопрос как обратиться с одного метода класса к другому Пример: ...

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.