Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Метод на уровне видимости класса. / 25 сообщений из 26, страница 1 из 2
29.04.2021, 10:13
    #40067090
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод на уровне видимости класса.
есть класс для работы с карточкой
Код: 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.
public class IA3178
{

   IADevices ia_devs = new IADevices();
   IADevice ia_device;

    IADevice[] ia_devices;

    public IA3178()
    {

    }

     public int GetDevices()
     {
            
     }

    public DeviseInfo GetDeviceInfo(int device_num)
    {
            
    }

    public void Init()
    {

    }

    public void SetOutput(int rel_num, bool state)
    {

    }

}



я могу создать несколько карточек и работать с ними
Код: c#
1.
2.
3.
4.
5.
IA3178 card1 = new IA3178 ();
IA3178 card2 = new IA3178 ();

card1.Init();
card1.SetOutput(5, true);



но метод нахождения карточек в сети GetDevices() - он общий для всех карточек и я хочу его вызвать на уровне класса
Код: c#
1.
IA3178.GetDevices();


а не
Код: c#
1.
card1.GetDevices();


как это сделать? он должен быть статический? и тогда все объекты с которыми он работает должны быть статическими?
...
Рейтинг: 0 / 0
29.04.2021, 10:23
    #40067094
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод на уровне видимости класса.
jenya7
он должен быть статический?
да
jenya7
и тогда все объекты с которыми он работает должны быть статическими?
нет
...
Рейтинг: 0 / 0
29.04.2021, 10:27
    #40067097
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод на уровне видимости класса.
Shocker.Pro
jenya7
он должен быть статический?
да
jenya7
и тогда все объекты с которыми он работает должны быть статическими?
нет

нет? а почему я получаю
Error CS0120 An object reference is required for the non-static field, method, or property 'IA3178.ia_devs'
...
Рейтинг: 0 / 0
29.04.2021, 10:27
    #40067098
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод на уровне видимости класса.
jenya7



как это сделать? он должен быть статический?

Да, можно еще метод-расширение.

jenya7

и тогда все объекты с которыми он работает должны быть статическими?

Нет.
...
Рейтинг: 0 / 0
29.04.2021, 10:32
    #40067101
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод на уровне видимости класса.
Код: 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.
private string Message { set; get; }
private int DeviceCount { set; get; }

IADevices ia_devs = new IADevices();
IADevice ia_device;

IADevice[] ia_devices;

static public int GetDevices()
        {
            IAError ia_err = ia_devs.DetectAllDevices();
            int idx = 0;

            if (ia_err != IAError.IA_OK)
            {
                Message = ia_devs.GetErrorMessage(ia_err);
                return 0;
            }

            if (ia_devs.Devices.Count == 0)
            {
                Message = "No device found";
                return 0;
            }
            else
            {
                DeviceCount = ia_devs.Devices.Count;

                ia_devices = new IADevice[DeviceCount];

                foreach (IADevice dev in ia_devs)
                {
                    //get the first device with DI functions
                    if (dev.HasDigitalInput || dev.HasDigitalOutput)
                    {
                        if (idx < DeviceCount)
                            ia_devices[idx++] = dev;
                    }
                }

                return DeviceCount;
            }
        }


на все объекты я получаю
An object reference is required for the non-static field, method, or property -------
...
Рейтинг: 0 / 0
29.04.2021, 10:41
    #40067106
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод на уровне видимости класса.
jenya7
An object reference is required for the non-static field, method, or property -------
все экземплярные объекты можно передать через параметры метода, если это необходимо

А на самом деле, ты сам-то понимаешь, что ты хочешь сделать?
Ты вызываешь метод, не зависящий от экземпляра, но хочешь оперировать полями конкретного экземпляра?
Продумай сначала, что ты хочешь сделать.
...
Рейтинг: 0 / 0
29.04.2021, 10:43
    #40067110
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод на уровне видимости класса.
Shocker.Pro
jenya7
An object reference is required for the non-static field, method, or property -------
все экземплярные объекты можно передать через параметры метода, если это необходимо

А на самом деле, ты сам-то понимаешь, что ты хочешь сделать?
Ты вызываешь метод, не зависящий от экземпляра, но хочешь оперировать полями конкретного экземпляра?
Продумай сначала, что ты хочешь сделать.

так а как сделать? это же общий метод для всех экземпляров.
...
Рейтинг: 0 / 0
29.04.2021, 10:44
    #40067112
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод на уровне видимости класса.
jenya7
это же общий метод для всех экземпляров.
еще раз. Если это общий метод для всех экземпляров, он не может оперировать какими либо полями экземпляров. Ну это логично же? Экземпляров может быть сто, а может не быть ни одного.
Опиши словами, что должен делать этот метод.
...
Рейтинг: 0 / 0
29.04.2021, 10:49
    #40067115
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод на уровне видимости класса.
Shocker.Pro
он не может оперировать какими либо полями экземпляров
точнее, может, конечно, но тогда ему этот экземпляр нужно передать через параметр метода
...
Рейтинг: 0 / 0
29.04.2021, 11:09
    #40067124
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод на уровне видимости класса.
Shocker.Pro
Shocker.Pro
он не может оперировать какими либо полями экземпляров
точнее, может, конечно, но тогда ему этот экземпляр нужно передать через параметр метода

сделал все поля статическими. пока проблем нет.
...
Рейтинг: 0 / 0
29.04.2021, 11:19
    #40067130
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод на уровне видимости класса.
jenya7,
тут фабрика напрашивается
+ комплексное управление всеми девайсам.
Код: c#
1.
2.
3.
4.
IA3178 card1 = FactoryIA3178.GetDevice(ip,port);
IA3178 card2 = FactoryIA3178.GetDevice(ip,port);
FactoryIA3178.Foo();
FactoryIA3178.Dispose();


подумайте, может и наружу их вытаскивать не надо, а вытащить только события работы девайса
Код: plaintext
1.
сделал все поля статическими. пока проблем нет.
самый страшный кошмар
...
Рейтинг: 0 / 0
29.04.2021, 11:38
    #40067144
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод на уровне видимости класса.
jenya7
сделал все поля статическими. пока проблем нет.

Лепота.
...
Рейтинг: 0 / 0
29.04.2021, 12:06
    #40067157
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод на уровне видимости класса.
Где-то в степи
jenya7,
тут фабрика напрашивается
+ комплексное управление всеми девайсам.
Код: c#
1.
2.
3.
4.
IA3178 card1 = FactoryIA3178.GetDevice(ip,port);
IA3178 card2 = FactoryIA3178.GetDevice(ip,port);
FactoryIA3178.Foo();
FactoryIA3178.Dispose();


подумайте, может и наружу их вытаскивать не надо, а вытащить только события работы девайса
Код: plaintext
1.
сделал все поля статическими. пока проблем нет.
самый страшный кошмар


прекрасно. но перед FactoryIA3178.GetDevice(ip,port); мне надо найти все подключенные девайсы. для этого нужен метод GetDevices().
...
Рейтинг: 0 / 0
29.04.2021, 12:24
    #40067166
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод на уровне видимости класса.
jenya7,
Можно я за вас попишу? ))
все что вам там нужно проверять, это за вас фабрика делает, она просто возврашает инстанс, или элегантно посылает ( ну типа exception)
зы если такой девайс существует, она просто не будет новый создавать, а вернет на него ссылку ( вы чо тупите)
...
Рейтинг: 0 / 0
29.04.2021, 12:45
    #40067183
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод на уровне видимости класса.
jenya7
сделал все поля статическими. пока проблем нет.

В печь.
...
Рейтинг: 0 / 0
29.04.2021, 12:48
    #40067184
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод на уровне видимости класса.
гы Чтоб ты жил на одну зарплату! имел всегда статические поля!
...
Рейтинг: 0 / 0
29.04.2021, 13:10
    #40067210
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод на уровне видимости класса.
Где-то в степи
jenya7,
Можно я за вас попишу? ))
все что вам там нужно проверять, это за вас фабрика делает, она просто возврашает инстанс, или элегантно посылает ( ну типа exception)
зы если такой девайс существует, она просто не будет новый создавать, а вернет на него ссылку ( вы чо тупите)


давайте из фантазий спустимся в реалии. посмотрите на GetDevices(). метод ia_devs.DetectAllDevices(); возвращает все девайсы.
я их засовываю в массив девайсов, да статический, а что в этом страшеого?
а потом девайс инициализируется по индексу
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
 public bool Init(int device_num)
        {
            Connected = false;

            if (device_num < DevicesCount)
            {
                if (ia_devices[device_num] != null)
                {
                    ia_device = ia_devices[device_num];
                    Connected = true;
                }
                else
                    return false;
            }
            else
                return false;

            return Connected;
        }


и потом работаю с этим девайсом
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
 public bool SetPin(int pin_idx, bool state)
        {
            IAError ia_err;

            if (ia_device != null)
            {
                ia_err = ia_device.WriteDOChannel(pin_idx, state);
                Message = ia_device.GetErrorMessage(ia_err);

                if (ia_err != IAError.IA_OK)
                    return false;
            }
            else
            {
                Message = DEVICE_IS_NULL;
                return false;
            }

            return true;
        }


позвольте! у меня все ходы записаны всё инкапсулированно.
...
Рейтинг: 0 / 0
29.04.2021, 13:49
    #40067236
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод на уровне видимости класса.
jenya7
а что в этом страшеого?

Да вот именно, что страше огого
...
Рейтинг: 0 / 0
29.04.2021, 13:51
    #40067239
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод на уровне видимости класса.
jenya7,
как мне все это развидеть.
1 зоопарк, змеи и верблюды, интересная у вас корпаративная политика наименования переменных.
2 где же тут фабрика?
3 сделать одно поле статическим && все поля статическими это не одно и тоже.
...
Рейтинг: 0 / 0
29.04.2021, 14:23
    #40067259
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод на уровне видимости класса.
щас пойдет блабла
...
Рейтинг: 0 / 0
29.04.2021, 16:24
    #40067326
ВМоисеев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод на уровне видимости класса.
>jenya7, сегодня, 10:13 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1335730&msg=22316153][22316153]
>как это сделать? он должен быть статический? и тогда все объекты с которыми он работает должны быть статическими?
<
Следует учитывать, что статические методы могут обращаться только к статическим членам класса. Обращаться к нестатическим методам, полям, свойствам внутри статического метода мы не можем.
...
Рейтинг: 0 / 0
29.04.2021, 16:30
    #40067327
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод на уровне видимости класса.
ВМоисеев
>jenya7, сегодня, 10:13 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1335730&msg=22316153][22316153]
>как это сделать? он должен быть статический? и тогда все объекты с которыми он работает должны быть статическими?
<
Следует учитывать, что статические методы могут обращаться только к статическим членам класса. Обращаться к нестатическим методам, полям, свойствам внутри статического метода мы не можем.


антистатики утверждают что всё статическое это зло.
...
Рейтинг: 0 / 0
29.04.2021, 16:32
    #40067328
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод на уровне видимости класса.
jenya7,

да они просто не видели все это, когда не было никаких объектов :)
...
Рейтинг: 0 / 0
29.04.2021, 16:56
    #40067343
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод на уровне видимости класса.
jenya7,
в дот нете можно и в ногу выстрелить по незнанию, зачем читать Рихтера
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 class MyClass<T>
    {
        private static  string _name;
        public MyClass(string name)
        {
            _name = $"{name} - {typeof(T)}";
        }

        public void Print()
        {
            Console.WriteLine(_name);
        }
    }


у Вас ведь статикой то и не пахло, вот вперло вас вызвать через тип, а тут созвичие со статикой и понеслась, впердет через лямбду или аномим и опять попрем..... у вас отсутствие архитектуры и ООП... уж пардоньте...
...
Рейтинг: 0 / 0
30.04.2021, 07:09
    #40067450
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод на уровне видимости класса.
Мутабельный статик в классе - это уж точно если не выстрел в ногу, то грабли.
Вообще, как я сильно подозреваю, ТС хочет что-то типа синглтона, только не зная про синглтон, он изобретает всяких франкенштейнов.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Метод на уровне видимости класса. / 25 сообщений из 26, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]