Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
3 / 2 / 2
Регистрация: 24.05.2016
Сообщений: 248

Работа с классом, подразделы

23.06.2017, 16:14. Показов 1431. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создаю класс для работы с памятью:
Кликните здесь для просмотра всего текста
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
    class Engine
    {
            public static string Name
            {
                get
                {
                    return Name;
                }
 
                private set
                {
                    Name = value;
                }
            }
            public static int Id
            {
                get
                {
                    return Id;
                }
 
                private set
                {
                    Id = value;
                }
            }
            public static IntPtr Handle
            {
                get
                {
                    return Handle;
                }
 
                private set
                {
                    Handle = value;
                }
            }
 
        public void Dispose(bool dispose) //помогите правильно создать метод
        {
            if(dispose == true)
            {
                CloseHandle(Engine.Handle); //
            } else { }
        }
        public Engine(string name)
        {
            Name = name;
            if (name != null) Id = GetProcessIdByName(name); else { throw new System.ArgumentNullException("name cannot be null", Name); } //не уверен
            if(Id != 0) { throw new System.ArgumentOutOfRangeException("process isnt exist", Name); }
        }
    }

Инициализирую так:
C#
1
Engine a = new Engine("CrackMe");
но, после этого я бы хотел иметь доступ к переменным(только к чтению), чтоб это выглядело вот так:
C#
1
IntPtr = a.Settings.Handle; // Чтоб так с каждой переменной (Id, Handle, Name)
Вопрос, как мне сделать такой подкласс? (или не подкласс, сам не знаю, что нужно использовать)

Добавлено через 21 час 17 минут
up up, неужели никто не знает?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.06.2017, 16:14
Ответы с готовыми решениями:

Работа с классом
Итак, продолжаю изучать С, на этот раз волею судьбы закинуло в С#. Проблема. Есть некий класс. Необходимо сделать массив классов и...

Работа с классом
Ребята подскажите как правильно исправить ошибку что бы компилировался код public class Begin { public...

Работа с классом Regex_2
Здравствуйте! Работа с классом Regex продолжается и сейчас я столкнулся со следующей трудностью: В txt файле у меня имеется строка...

6
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
23.06.2017, 16:56
Цитата Сообщение от FastMailSend Посмотреть сообщение
Вопрос, как мне сделать такой подкласс? (или не подкласс, сам не знаю, что нужно использовать)
А зачем вам подкласс? На первый взгляд не хватает объявления полей в классе, например, тот же Id или Name. Конструктором устанавливайте значения, и потом сможете их читать
1
3 / 2 / 2
Регистрация: 24.05.2016
Сообщений: 248
23.06.2017, 22:14  [ТС]
я уже исправил класс, но при инициализации
C#
1
 Engine a = new Engine("CrackMe");
, мне хочется получить доступ не
C#
1
a.Id;
, а
C#
1
a.Settings.Id;
(мне так больше нравится)

Добавлено через 34 секунды
а как так сделать незнаю :c
0
 Аватар для Lexeq
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
23.06.2017, 22:34
Можно что-то типа такого:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    class Engine
    {
        public Settings Settings {get; private set;}
 
        public Engine()
        {
            Settings = new Settings()
            {
                Name = "...",
                ID = 12345
            };
        }
    }
 
    class Settings
    {
        public int ID { get; set; }
        public string Name { get; set; }
    }
1
3 / 2 / 2
Регистрация: 24.05.2016
Сообщений: 248
23.06.2017, 22:50  [ТС]
а как сделать чтоб Id, Name и Handle мог изменять только сам Engine, но не пользователь.
(Чтоб я не мог установить переменную
C#
1
 a.Settings.Id = 1;
), но мог ее прочитать:
C#
1
 int b = a.Settings.Id;
)

Добавлено через 9 минут
у кого есть идеи?
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
23.06.2017, 23:10
Лучший ответ Сообщение было отмечено FastMailSend как решение

Решение

Как вариант, можно создать дополнительный интерфейс для изменения внутри класса Engine, убрав также сеттеры у свойства типа Settings и сделав его как бы immutable, то есть пересоздавая объект Settings при каждом изменении cвойства.

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
class Engine
    {
        private const int DefaultId = 1;
        private const string DefaultName = "Foo";
        private const int DefaultHandle = 1;
 
 
        public Settings Settings { get; private set; }
 
        public Engine()
        {
            Settings = new Settings(DefaultId,DefaultName,DefaultHandle);
        }
 
        public void ChangeSettingsId(int newId)
        {
             Settings = new Settings(newId, Settings.Name, Settings.Handle);
        }
 
        public void ChangeSettingsName(string newName)
        {
            if (string.IsNullOrEmpty(newName)) throw new ArgumentException(nameof(newName));
            Settings = new Settings(Settings.Id, newName, Settings.Handle);
        }
 
 
        public void ChangeSettingsHandle(int newHandle)
        {
            Settings = new Settings(Settings.Id, Settings.Name, Settings.Handle);
        }
    }
 
class Settings
    {
        public int Id { get; }
        public string Name { get; }
        public int Handle { get; }
 
        public Settings(int id, string name, int handle)
        {
            Id = id;
            Name = name;
            Handle = handle;
        }
    }
Других вариантов пока не вижу, так как в любом случае придется раскрывать наружу сеттеры объекта Settings.
Не смотря на то, что Engine имеет интерфейс для изменения Settings из внешнего кода, все же этот вариант сложнее использовать неправильно, чем с открытыми сеттерами у Settings.
1
 Аватар для Lexeq
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
23.06.2017, 23:12
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
class Engine
    {
        public Settings Settings { get; private set; }
 
        public Engine()
        {
            Settings = new Settings("...", 1234);
        }
 
        private void SomeMethod()
        {
            //Если нужно что-то поменять создаем настройки с новыми данными
            Settings = new Settings("new name", Settings.ID);
        }
 
    }
 
    public class Settings
    {
        public int ID { get; private set; }
 
        public string Name { get; private set; }
 
        public Settings(string name, int id)
        {
            Name = name;
            ID = id;
        }
 
    }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.06.2017, 23:12
Помогаю со студенческими работами здесь

Работа с классом Regex
Здравствуйте. Сейчас работаю с классом Regex и возникла следующая трудность: В txt файле у меня есть длинная строка следующего вида: ...

Работа с классом Money
Помогите, пожалуйста :( 1.Реализовать определение нового класса (закрытые атрибуты, свойства, конструкторы, вывод атрибутов). Для...

Работа с классом SortedDictionary
Есть переменная dict в которую закидываются данные, в последствии надо скопировать ключи в массив string а значения в массив double как это...

Работа с классом-контейнером
Имеется такой класс: class RectangleContainer { private PictureBox _pictBox; private Rectangle mas; public...

Работа с классом WebClient
Здравствуйте! Мне нужно передать программе исходный код некой web-страницы. Для этого решил использовать метод OpenRead класса WebClient. В...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru