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

Как обеспечить доступ к методу из различных классов

26.12.2012, 13:08. Показов 764. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здраствуйте, у меня получилась такая проблема. Помогите пожалуйста её решить.
Я окончательно запутался.

В классе 2 методом Creat должен заполнить значения.
В MainWindow я запускаю метод Creat.
Проблема в том что я не понимаю как мне сделать так чтоб в классе 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
48
49
50
51
52
53
54
55
56
57
58
59
//************
 class Class1
    {
        public decimal c0 { get; set; }
        public decimal0 { get; set; }
 
    }
//************
class Class2
    {
        public Class2(Class1 c1, Class1 cc1)
        {
            C1 = c1;
            CC1 = cc1;
        }
        public Class1 C1 { get; set; }
        public Class1 CС1 { get; set; }
 
 
        public void creat()
        {
            C1.c0 = 11;
            C1.cс0 = 12;
            CС1.c0 = 13;
            CС1.cс0 = 14;
        }
    }
//************
class Class3
    {
        public Class3()
        {
        }
        private Class2 s = new Class2(new Class1());
 
        public void Message2()
        {
            MessageBox.Show(Convert.ToString(s.C1.c0));
        }
    }
//************
public partial class MainWindow : Window
    {
        private Class2 s = new Class2(new Class1());
        private Class3 s2 = new Class3();
        public MainWindow()
        {
            InitializeComponent();
        }
 
        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            s.creat();
            MessageBox.Show(Convert.ToString(s.C1.c0));
 
            s2.Message2();
        }
    }
//************
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.12.2012, 13:08
Ответы с готовыми решениями:

Разработать систему классов по заданной теме. Обеспечить соответствующую функциональность классов
Блин, люди, помоги с задачей :( А то зачет не поставят :( Разработать систему классов по...

Как обеспечить многопользовательский доступ к БД
Вообщем меня на работе попросили написать простую базу данных в 2003 Accesse.... я сделал её... но...

Как предоставить безопасный удалённый доступ (SSHv2). И Как обеспечить защиту портов доступа на коммутатроре
Имеется почти законченная схема. В задании имеются ещё три пункта. 1) К сетевому оборудованию...

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

7
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
26.12.2012, 14:22 2
м... возможно как минимум:
1) не пытаться вызвать конструктор класса с одним параметром, когда их у него два
2) не объявлять поля и свойство класса буквами разных алфавитов (СС1- какая-то С русская была)
0
7 / 7 / 1
Регистрация: 02.03.2011
Сообщений: 310
26.12.2012, 14:29  [ТС] 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
48
49
50
51
52
53
54
55
56
57
58
59
60
//*************
class Class1
    {
        public decimal c0 { get; set; }
        public decimal cc0 { get; set; }
 
    }
//*************
class Class2
    {
        public Class2(Class1 c1, Class1 cc1)
        {
            C1 = c1;
            CC1 = cc1;
 
        }
        public Class1 C1 { get; set; }
        public Class1 CC1 { get; set; }
 
 
        public void creat()
        {
            C1.c0 = 11;
            C1.cc0 = 12;
            CC1.c0 = 13;
            CC1.cc0 = 14;
        }
    }
//*************
class Class3
    {
        public Class3()
        {
        }
        private Class2 s = new Class2(new Class1(), new Class1());
 
        public void Message2()
        {
            MessageBox.Show(Convert.ToString(s.C1.c0));
        }
    }
//*************
public partial class MainWindow : Window
    {
        private Class2 s = new Class2(new Class1(), new Class1());
        private Class3 s2 = new Class3();
        public MainWindow()
        {
            InitializeComponent();
        }
 
        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            s.creat();
            MessageBox.Show(Convert.ToString(s.C1.c0));
 
            s2.Message2();
        }
    }
//*************
0
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
26.12.2012, 14:36 4
если именно к этим, то просто, но не понятно, удовлетворит ли решение потребностям, т.к. совсем не понятно для чего всё это нужно:
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.IO;
 
namespace ConsoleApplication10
{
    class Programm
    {
        //*************
        class Class1
        {
            public decimal c0 { get; set; }
            public decimal cc0 { get; set; }
 
        }
        //*************
        class Class2
        {
            public Class2(Class1 c1, Class1 cc1)
            {
                C1 = c1;
                CC1 = cc1;
 
            }
            public Class1 C1 { get; set; }
            public Class1 CC1 { get; set; }
 
 
            public void creat()
            {
                C1.c0 = 11;
                C1.cc0 = 12;
                CC1.c0 = 13;
                CC1.cc0 = 14;
            }
        }
        //*************
        class Class3
        {
            private Class2 s = new Class2(new Class1(), new Class1());
            public Class3(Class2 c2)
            {
                s = c2;
            }
           
 
            public void Message2()
            {
                Console.WriteLine(Convert.ToString(s.C1.c0));
            }
        }
 
        public static void Main()
        {
            Class2 s = new Class2(new Class1(), new Class1());
            s.creat();
            Class3 s2 = new Class3(s);
 
            Console.WriteLine(Convert.ToString(s.C1.c0));
 
            s2.Message2();
 
            Console.ReadLine();
        }
    }
}
1
7 / 7 / 1
Регистрация: 02.03.2011
Сообщений: 310
26.12.2012, 15:15  [ТС] 5
Мне просто нужно чтоб при запуске программы выполнился метод create,
а потом я с этими числами мог работать в разных классах.
А у меня другие классы тупо видели одни нули)

Может конечно я и не правильно строю логику. Я с ООП никак разобраться не могу, запинаюсь на самых мелочах.

Если позволите еще один вопрос
как с другого класса изменить объект на форме, например в textbox что нибудь вписать,
у меня только из MainWindow получается это сделать.
0
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
26.12.2012, 17:03 6
а больше ниоткуда и не надо, иначе - костыли. изменять свойства класса предпочтительно или из этого -же класса (в данном случае textBox), или из класса владельца (в данном случае mainWindow).
Если делать по другому, то в случаях абстрагирования то книги будут изменять свойства полки, то ещё какие демоны вылезут...

А вообще советую посоздавать ООП приложения в консоли, от простого к сложному. как итог, допустим, создать полную функциональную модель колоды карт =)
1
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
26.12.2012, 18:23 7
А зачем вообще нужны разные классы?
Может, достаточно будет создать один класс с множеством методов для обработки своих данных?
Если в процессе обработки данных тип данных изменяется - то можно:
1. Сделать что методы класса возвращали новый объект и дальше работать с ним.
2. Сделать статический класс который своим статическим методом принимает объект первого типа и возвращает объект нового типа.

Для работы с формой следует поступить следующим образом:
1. Создать объект для представления данных - поле нашей формы.
2. На событиях формы(button_Click и т.п) вызывать методы объекта-данных и тут же при необходимости, или отдельным событием выводить результат на форму.

Добавлено через 3 минуты
В более сложном случае, когда действительно необходимо чтоб объект вызвал методы другого объекта следует использовать делегаты. Но их необходимо явно указать во втором объекте. Например, дизайнер указывает ваш метод обработки нажатия на кнопку:

C#
1
button1.Click +=new EventHandler(button1_Click);
1
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
27.12.2012, 10:08 8
Цитата Сообщение от Learx Посмотреть сообщение
Но их необходимо явно указать во втором объекте
необходимости нет, это сделано для наглядности.
C#
1
button1.Click +=button1_Click;
Если проект небольшой то действительно хватает одного класса и нескольких методов... хм... зачастую этот класс - Program, а половина из этих методов - static void Main().

для грамотной работы с WinForms сначала просто необходимо изучить консольное ООП. ведь что есть конкретная форма - объект-контейнер, в котором куча других объектов, зачастую тоже контейнеров (и так далее), а так-же набор методов-обработчиков событий данных объектов.
0
27.12.2012, 10:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.12.2012, 10:08
Помогаю со студенческими работами здесь

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

Как из формы получить доступ к методу из класса?
Класс public class Class1 { SqlConnection conn; public void GetConnect() ...

Как получить доступ к методу в приватном классе?
Класс #include <iostream> class Employee { public: int GetAge() { return itsAge; } void...

Spring Security, как обеспечить доступ к персональным страницам только их владельцу
Есть пользователь пользователь может владеть несколькими заведениями, а может не владеть ни одним....


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

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