![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| bvn13 |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 26.5.2009 Репутация: нет Всего: нет |
А подскажите, пожалуйста. В С++ есть возможность для класса дать доступ к приват-данным другим функциям/классам с помощью конструкции friend. А есть ли аналог такого в C#? Просто хочу в классе иметь одно свойство (переменную типа string) в привате, но для определенных (других) классов дать к ней полный доступ. Классы не наследуются. Как такое написать?
Что-то типа вот такого:
Добавлено через 14 минут и 20 секунд сам нашел. Ссылка: Аналог friend в С# цитата:
|
||||
|
|||||
| ДобренькийПапаша |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: 3 Всего: 7 |
В C# есть мощный механизм, который называется свойства))))
Вы сохраняете инкапсуляцию, объявляя поле как private, но получаете к нему доступ через public свойство, например:
Теперь к полям класса можно обратиться так:
кроме get (если задн только get вы сможете только читать), можно ещё добавить set (на запись). Вобщем гуглите свойства C#.NET Это сообщение отредактировал(а) ДобренькийПапаша - 13.8.2009, 15:08 -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
||||
|
|||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 2 Всего: 211 |
||||
|
||||
| bvn13 |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 26.5.2009 Репутация: нет Всего: нет |
Да, об этом я знаю. Но когда я объявляю эти get и set, то эти свойства открываются для всех участков кода, где подключен namespace. А мне нужно только для определенных классов дать возможность работать с этими свойствами. Такое возможно? Добавлено через 1 минуту и 4 секунды эм...... поясните, пожалуйста. |
||||||
|
|||||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 2 Всего: 211 |
friend - разрешает доступ функции/классу к приватным членам другого класса. internal - Член класса с модификатором доступа internal доступен для всех классов внутри одной сборки. friend - разрешает доступ, internal - спецификатор доступа...не вижу ничего общего между ними. |
|||
|
||||
| bvn13 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 26.5.2009 Репутация: нет Всего: нет |
а что значит "доступен для всех классов внутри одной сборки"? Имеется в виду один namespace? Или один проект? или что? |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 2 Всего: 211 |
http://en.wikipedia.org/wiki/.NET_assembly |
|||
|
||||
| bvn13 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 26.5.2009 Репутация: нет Всего: нет |
Может, я не понятно написал.... Попробую пояснить. Мне надо, чтобы одно конкретное свойство класса А было доступно (для записи и чтения) только из методов класса В, а из других мест - только для чтения. Так возможно сделать? |
|||
|
||||
| diadiavova |
|
||||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 18 Всего: 142 |
Если речь об одном свойстве, то - нет. Можно сделать так, чтобы все члены класса А были видны их В, для этого В надо вложить в А
И теперь код
Выведет значение приватного поля класса А. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
||||||
|
|||||||
| ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: 3 Всего: 7 |
Уважаемый bvn13, а зачем вы себе так мозг канифолите может скажете? Зачем вам ТАКАЯ инкапсуляция, что вы там такое скрываете?
-------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
| Skynin |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 1.7.2007 Где: Харьков Репутация: 0 Всего: 10 |
Аналога в C# нет. (тот кто написал "internal Это и есть аналог friend". просто не в курсе что такое friend в C++ или internal в C#)
Как и многих других вещей из С++. навскидку - const методов. Вобщем рекомендую изучать С# отдельно, не оглядываясь на С++, потому что у С++ куда больше синтаксических наворотов и возможностей. А если еще и вспомнить про указатели... "Забудьте" С++ быстрее получится изучить C# |
|||
|
||||
| bvn13 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 26.5.2009 Репутация: нет Всего: нет |
Зачем? Да это очень удобно. Есть у меня два класса. Один может быть использован независимо от второго (Это и предполагается). А во втором есть переменная с типом первого класса. Но есть в первом классе переменная Идентификатор, которая должна быть в режиме только для чтения. Везде. За исключением второго класса, откуда она устанавливается, предварительно найденная в базе данных. Как на С++ такое делать знаю, а вот как на С# - нет... Добавлено через 2 минуты и 38 секунд Эх, забыть... Это очень интересная и полезная вещь в С++... Вот мне интересно, неужели в Шарпее вообще невозможно дать доступ к приватной части класса для "узкого круга" процедур? |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 2 Всего: 211 |
bvn13
Дружба - эта самое сильное взаимоотношение классов (ниже по ступеньке идет наследование), очень желательно ее избегать, настолько желательно, что микрософт решила убрать дружественные функции и классы из C#. |
|||
|
||||
| bvn13 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 26.5.2009 Репутация: нет Всего: нет |
Уважаемый, я вот уже несколько часов в поисках по интернету... не могу найти, что же значит это "Член класса с модификатором доступа internal доступен для всех классов внутри одной сборки". Не могли бы Вы пояснить, мне несведующему? Добавлено через 1 минуту и 18 секунд Объекты базы данных. |
|||
|
||||
| azesmcar |
|
||||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 2 Всего: 211 |
Ты же сам писал.
а что такое сборка - я ответил ссылкой, ты ведь не лекции по C# здесь ожидаешь увидеть? Вот, немного процитирую
http://msdn.microsoft.com/en-us/library/7c...28VS.80%29.aspx что такое сборка (assembly)
http://msdn.microsoft.com/en-us/library/ms...28VS.80%29.aspx Например, ты можешь написать DLL, в классах этой DLL использовать спецификатор доступа internal, он будет доступен всем методам в DLL, но пользователь библиотеки не будет иметь доступ к ней. Есть еще protected internal, почитай в MSDN. Это сообщение отредактировал(а) azesmcar - 13.8.2009, 20:48 |
||||||||
|
|||||||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | .NET для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |