Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
 Аватар для AlienWare
0 / 0 / 0
Регистрация: 23.05.2012
Сообщений: 4
.NET 4.x

Как сравнивать и копировать значения полей объектов класса "MyClass" с доступом "private"

23.05.2012, 02:16. Показов 2596. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, уважаемые форумчане!
Изучаю .NET по книге Г.Шилдта "Полное руководство С#". В программировании новичок поэтому прошу ногами сильно не пинать, собственно вопрос в следющем:

Есть вот такая програмка из вышеуказанной книги:

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
class MyClass
{
    int alpha, beta;
 
    public MyClass(int i, int j)
    {
        alpha = i;
        beta = j;
    }
 
    public bool SameAs(MyClass ob)
    {
        if ((ob.alpha == alpha) & (ob.beta == beta))
            return true;
        else return false;
    }
 
    public void Copy(MyClass ob)
    {
        alpha = ob.alpha;
        beta = ob.beta;
    }
 
    public void Show()
    {
        Console.WriteLine("alpha: {0}, beta: {1}", alpha, beta);
    }
}
 
class PassOb
{
    static void Main()
    {
        MyClass ob1 = new MyClass(1, 2);
        MyClass ob2 = new MyClass(3, 4);
 
        Console.Write("Ob1: ");
        ob1.Show();
        Console.Write("Ob2: ");
        ob2.Show();
 
        if (ob1.SameAs(ob2))
            Console.WriteLine("ob1 равен ob2");
        else
            Console.WriteLine("ob1 неравен ob2");
        Console.WriteLine();
 
        ob1.Copy(ob2);
        Console.Write("ob1 после копирования: ");
        ob1.Show();
 
        if (ob1.SameAs(ob2))
            Console.WriteLine("ob1 равен ob2");
        else
            Console.WriteLine("ob1 неравен ob2");
        Console.WriteLine();
 
        Console.ReadKey();
 
 
    }
}

Каким образом мы можем сравнивать и копировать значения полей объектов класса "MyClass", если они имеют модификатор доступа "private", т.е. к ним можно обращаться только в классе. При передаче объекта методу "SameAs" мы напрямую обращаемся к элементу передаваемого объекта "ob.alpha" и "ob.beta"?

З.Ы. Я предполагаю что еще до конца не знаю всех особенностей модификаторов доступа, прошу разъяснить данный момент.

С уважением, Николай Паламарь.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.05.2012, 02:16
Ответы с готовыми решениями:

Сериализация закрытых (private) полей класса
Я пишу свой сериализатор/десериализатор, НЕ на основе System.XML.Serialization. (Я бы и не взялся за это, меня немного подташнивает от .NET...

Дан массив объектов. Подсчитать количество объектов в массиве, у которых совпадают значения двух полей.
Написать функцию, которая принимает на вход массив объектов. Каждый объект имеет два поля: x и y. Функция должна вернуть количество всех...

Как получить значения полей класса?
Не понимаю как получить значения класса. Вот я записываю значения в поля: public classFields() { ...

8
Футболист
 Аватар для Goal
533 / 435 / 142
Регистрация: 31.10.2011
Сообщений: 1,010
23.05.2012, 02:35
Давай я тебе дам свой пример, ща его напишу сек. легче обьяснить

Добавлено через 12 минут
Так вот повелось, что мы не можем доступиться к переменным, которые имеют закрытый модификатор доступа) т.е. мы их не видим, их видно только внутри самого класса.
Пример
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
static void Main(string[] args)
        {
            TestClass Perform = new TestClass();
            //Perform.TestVariable - проверка:) убери знаки комментариев "//" и увидиш, что переменную не видно отсюда
            Console.WriteLine("Использование открытого метода для получения закрытой переменной "+Perform.Get_TestVariable());
            Console.WriteLine("Введите новое значение для переменной:");
            Perform.Set_TestVariable(Int32.Parse(Console.ReadLine()));//вызов открытого метода для записи целого числа в закрытую переменную класса
            Console.WriteLine("Использование открытого метода для получения закрытой переменной " + Perform.Get_TestVariable());
            Console.ReadKey();
        }
        class TestClass
        {
            private int TestVariable = 9;//переменная с закрытым модификатором доступа
            public int Get_TestVariable()
            {
                return TestVariable;//переменную с модификатором доступа private видно внутри класса
            }//открытые методы(модификатор доступа public позволяет доступиться к методу, для которого не проблема вернуть закрытую переменную данного класса)
            public void Set_TestVariable(int _TestVariable)
            {
                TestVariable = _TestVariable;
            }
        }
0
 Аватар для AlienWare
0 / 0 / 0
Регистрация: 23.05.2012
Сообщений: 4
23.05.2012, 02:47  [ТС]
Эм, спасибо за ответ, но я знаю что мы не можем обратится к "private" полю вне класса, в общем исходя из полученного ответа понимаю что вопрос не точен, тогда по примеру:
Есть экземпляры класса "MyClass": "ob1" и "ob2". В классе "MyClass" объявлены поля "int alpha, beta", т.к. они имеют модификатор доступа "private", то получить доступ к ним можем только в классе, т.е. кроме как в классе мы нигде не можем сделать следующее: "alpha ... ...", "beta ... ..." ну и соответственно из других классов мы не можем сделать "ob1.alpha ... ...", "ob2.alpha ... ...", тогда каким образом работает вот этот код:

C#
1
2
3
4
5
6
7
 public bool SameAs(MyClass ob)
    {
//передаем сюда объект "ob1" или "ob2", но ведь поля у них private, как получаем доступ?
        if ((ob.alpha == alpha) & (ob.beta == beta)) 
            return true;
        else return false;
    }
если объекты разные и доступ к полям у них закрыт, т.е. как один объект получает доступ к приватным полям другого объекта?
Или объекты одного класса имеют доступ к приватным полям друг друга?
0
Футболист
 Аватар для Goal
533 / 435 / 142
Регистрация: 31.10.2011
Сообщений: 1,010
23.05.2012, 02:56
Цитата Сообщение от AlienWare Посмотреть сообщение
если объекты разные и доступ к полям у них закрыт, т.е. как один объект получает доступ к приватным полям другого объекта?
Или объекты одного класса имеют доступ к приватным полям друг друга?
не имеют

Закрытые обьекты одного класса видимы только в самом классе. За границами класса ты их не увидиш просто так, надо использовать открытые методы что бы достучаться.
0
 Аватар для Lasur
267 / 257 / 43
Регистрация: 18.03.2012
Сообщений: 506
23.05.2012, 03:02
Вообще - то имеют, именно поэтому работает приведенный код.
Находясь внутри класса, вы имеете доступ ко всем полям любого объекта этого класса.
1
 Аватар для AlienWare
0 / 0 / 0
Регистрация: 23.05.2012
Сообщений: 4
23.05.2012, 03:07  [ТС]
Цитата Сообщение от Lasur Посмотреть сообщение
Вообще - то имеют, именно поэтому работает приведенный код.
Находясь внутри класса, вы имеете доступ ко всем полям любого объекта этого класса.
И чтобы уяснить наверняка: все братские (сестренские) объекты имею доступ к полям друг друга потому что принадлежат одному классу? Я так понимаю Г.Шилдт будет рассматривать эту тему в разделе "наследование"? Или это та тонкость которую я уже должен был понять сам?
0
 Аватар для Lasur
267 / 257 / 43
Регистрация: 18.03.2012
Сообщений: 506
23.05.2012, 03:19
Цитата Сообщение от AlienWare Посмотреть сообщение
все братские (сестренские) объекты имею доступ к полям друг друга потому что принадлежат одному классу?
Если вы про объекты одного типа, то да, как я уже написал выше.
Классы - наследники же не имеют доступа к private полям родителя (это то, что у Шилдта в главе "Наследование").
0
 Аватар для AlienWare
0 / 0 / 0
Регистрация: 23.05.2012
Сообщений: 4
23.05.2012, 03:22  [ТС]
Пока на 230 странице, поэтому еще не скоро будет, но вопрос возник, вот так вот бывает) Спасибо за ответ!

С ув. AlienWare.
0
Футболист
 Аватар для Goal
533 / 435 / 142
Регистрация: 31.10.2011
Сообщений: 1,010
23.05.2012, 03:24
аааа ну прально

Цитата Сообщение от AlienWare Посмотреть сообщение
Пока на 230 странице, поэтому еще не скоро будет, но вопрос возник, вот так вот бывает) Спасибо за ответ!

С ув. AlienWare.
удачи
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.05.2012, 03:24
Помогаю со студенческими работами здесь

Как добавить в DataGridViewComboBoxColumn значения из полей агрегируемого класса
Задача такая стоит Из колеекции экземпляров класса надо заполнить элемент DataGridView: 1. подскажите как добавить в...

Как добавить в DataGridViewComboBoxColumn значения из полей агрегируемого класса
Здравствуйте. ПОдскажите пожалуйста почему не получается отобразить в ячейке комбо бокс свойство класса ( коллекцию экземпляров...

Есть ли разница между MyClass *c = new MyClass() и MyClass *c = new MyClasss;
Собственно, что происходит, когда создаёшь объект класса без скобок в название после new?

Как получить значения полей объекта класса через арибуты
Предположим, мне нужно вывести на экран 1 Jack 2 Jill при помощи метода статического класса GenerateJson. Никак не могу понять как мне это...

Как получить и устанавливать значения полей класса Реализация фрейма?
Помогите, пожалуйста, ни как не могу найти способ получать и устанавливать значения полей класса. Дан класс "Книжная полка",...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
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. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru