powered by simpleCommunicator - 2.0.27     © 2024 Programmizd 02
Map
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Метод на уровне видимости класса.
25 сообщений из 26, страница 1 из 2
Метод на уровне видимости класса.
    #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
Метод на уровне видимости класса.
    #40067094
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7
он должен быть статический?
да
jenya7
и тогда все объекты с которыми он работает должны быть статическими?
нет
...
Рейтинг: 0 / 0
Метод на уровне видимости класса.
    #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
Метод на уровне видимости класса.
    #40067098
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7



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

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

jenya7

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

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

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

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

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

сделал все поля статическими. пока проблем нет.
...
Рейтинг: 0 / 0
Метод на уровне видимости класса.
    #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
Метод на уровне видимости класса.
    #40067144
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7
сделал все поля статическими. пока проблем нет.

Лепота.
...
Рейтинг: 0 / 0
Метод на уровне видимости класса.
    #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
Метод на уровне видимости класса.
    #40067166
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7,
Можно я за вас попишу? ))
все что вам там нужно проверять, это за вас фабрика делает, она просто возврашает инстанс, или элегантно посылает ( ну типа exception)
зы если такой девайс существует, она просто не будет новый создавать, а вернет на него ссылку ( вы чо тупите)
...
Рейтинг: 0 / 0
Метод на уровне видимости класса.
    #40067183
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7
сделал все поля статическими. пока проблем нет.

В печь.
...
Рейтинг: 0 / 0
Метод на уровне видимости класса.
    #40067184
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гы Чтоб ты жил на одну зарплату! имел всегда статические поля!
...
Рейтинг: 0 / 0
Метод на уровне видимости класса.
    #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
Метод на уровне видимости класса.
    #40067236
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7
а что в этом страшеого?

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


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

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


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