Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.25;
Скачать: CL | DM;

Вниз

Дружественные методы и классы в C#   Найти похожие ветки 

 
Cyrax ©   (2007-02-22 22:27) [0]

Есть ли аналоги дружественных методов и классов в C# ?
Необходимо получить доступ к private-полю и к private-методу класса из другого класса...

Ситуация из реального проекта:

Объект класса Element может создаваться прикладным пользователем в своей программе. В то же время имеется объект SChart, который так же может создаваться и юзаться пользователем в своих программах.
Некоторый метод класса Element не может быть вызван прикладным пользователем по причине отсутствия в этом необходимости (этот метод используется другими public-методами этого же класса). Вполне резонно объявить этот метод как private.
В то же время объект класса SChart должен иметь доступ к этому private-методу класса Element. Если в этом случае мы откроем доступ (сделаем метод класса Element открытым), то тем самым мы его откроем его и для прикладного пользователя, который будет юзать как Element, так и SChart...
Как разрешить эту проблему в данном случае ?

Если уж как-то извращаться, то так, чтобы пользователя класса Element это не коснулось, т.е. для рядового пользователя класса Element метод должен быть закрытым (а не открытым, но с дополнительным параметром)...


 
default ©   (2007-02-22 22:30) [1]

internal?


 
default ©   (2007-02-22 22:32) [2]

кстати аналог internal в VB .NET так и зовётся Friend- друх!


 
default ©   (2007-02-22 22:34) [3]

то есть надо посадить Element и SChart в одну сборку и объявить этот метод как internal


 
default ©   (2007-02-22 22:46) [4]

ещё вариант вынести этот метод в интерфейс о котором будет знать только SChart(интерфейс как способ общения "своих":):))
конечно, этот интерфейс можно вычислить отражением, но тем же отражением можно вычислить и private и internal и тд
но интерфейс это, конечно, изврат


 
default ©   (2007-02-22 22:54) [5]

вот ты общаешься с другом в компании незнакомых и вы не можете говорить о сокровенном в присутствии незнакомым, но наедине у вас "свои" беседы могут быть:)
вот интерфейс в данном случае это аналог, можель реальности:)
так что если классы в разных сборках по логике должны быть, то не думай, а используй интрефрейсы:)


 
Cyrax ©   (2007-02-26 19:27) [6]

Отчёт для Default"а №1
-----------------------

По поводу internal: заюзал тока сегодня. Вроде как работает. На этот счёт могу посл..., тьфу, отреспектить...0/...

Кстати, через атрибуты методы можно сделать доступными и для произвольной сборки (не только текущей)...

p.s. Частенько, пока переваришь ветку, она уже теряется... Я ш не целый день за компом сижу...



Страницы: 1 вся ветка

Текущий архив: 2007.03.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.033 c
11-1142828301
Kealon
2006-03-20 07:18
2007.03.25
KeyPreview


1-1170401505
KOSS
2007-02-02 10:31
2007.03.25
Autorun


15-1172918421
wsw
2007-03-03 13:40
2007.03.25
Как вычилсить корень из числа типа int64? sqrt() - не помогает!


15-1172872547
Владмир
2007-03-03 00:55
2007.03.25
лицензирование Delphi 6


1-1170086620
RedBanner
2007-01-29 19:03
2007.03.25
Скрыть окно программы с панели задач