|
Насчёт областей доступа - кто-нибудь знал об этом?
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5. 6. 7.
Если в текущем классе создать экземпляр текущего же класса, то можно вызвать закрытый метод вновь созданного экземпляра. Ведь я же вызываю не метод текущего экземпляра, а метод нового экземпляра. http://stackoverflow.com/questions/6983553/why-are-private-fields-private-to-the-type-not-the-instance http://stackoverflow.com/questions/13195891/why-can-i-call-a-private-method-of-another-instance-of-the-same-type-outside-of Гугл Просто втретилось тут "5 лет пишу на C# и не знал об этом". Сам тоже попробовал написать вызов закрытого метода внутри этого же метода из другого экземпляра - и получилось. Я удивился. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2015, 07:25 |
|
Насчёт областей доступа - кто-нибудь знал об этом?
|
|||
---|---|---|---|
#18+
Почему-то всегда казалось, что ограничение доступа распространяется и на экземпляры типа, а не только на сами типы - ну, по принципу, что сущность "тип" является надсущностью "экземпляр" и вроде как должна наследовать её свойства, если рассуждать логически. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2015, 07:28 |
|
Насчёт областей доступа - кто-нибудь знал об этом?
|
|||
---|---|---|---|
#18+
Smith27Я удивился.Я бы удивился, если бы это было не так. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2015, 07:30 |
|
Насчёт областей доступа - кто-нибудь знал об этом?
|
|||
---|---|---|---|
#18+
То же самое касается и того, что если объявить два приватных класса в одном пространстве имёт, то в этих классах можно создавать экземпляры друг друга. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2015, 07:35 |
|
Насчёт областей доступа - кто-нибудь знал об этом?
|
|||
---|---|---|---|
#18+
Алексей КSmith27Я удивился.Я бы удивился, если бы это было не так. Меня всегда удивляли люди, которые, узнав что-то реально новое для себя, говорят, что они и так всегда это знали - это же, мол, очевидно. Ну вроде как всю жизнь проходишь на работу и с работы мимо чего-нибудь, а потом - РАЗ! - и только сейчас заметил какую-нибудь деталь. Для меня, например, неочевидно было, что корова, чтобы давать молоко, должна быть всегда беременна или находиться на этапе кормления телёнка. В детстве всегда пил молоко парное. Сам, естественно, не доил. Знал только, что оно из вымени берётся, но как оно там оказывается и при каких условиях - не знал. Почему-то казалось, что корова ВСЕГДА должна давать молоко, и без всяких беременностей - уж такое она животное. Несмотря на все оговорки, что она млекопитающее, и аналогии с женщинами. ))) Из разряда невероятное-очевидное. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2015, 07:40 |
|
Насчёт областей доступа - кто-нибудь знал об этом?
|
|||
---|---|---|---|
#18+
а еще в классе можно вызывать статические методы без указания имени класса Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2015, 07:41 |
|
Насчёт областей доступа - кто-нибудь знал об этом?
|
|||
---|---|---|---|
#18+
Smith27Алексей Кпропущено... Я бы удивился, если бы это было не так. Меня всегда удивляли люди, которые, узнав что-то реально новое для себя , говорят, что они и так всегда это знали - это же, мол, очевидно. Ну вроде как всю жизнь проходишь на работу и с работы мимо чего-нибудь, а потом - РАЗ! - и только сейчас заметил какую-нибудь деталь.С чего ты взял, что в этом топике я узнал что-то новое? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2015, 07:42 |
|
Насчёт областей доступа - кто-нибудь знал об этом?
|
|||
---|---|---|---|
#18+
kmawа еще в классе можно вызывать статические методы без указания имени класса Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
Вот это как раз для меня было овечидно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2015, 07:43 |
|
Насчёт областей доступа - кто-нибудь знал об этом?
|
|||
---|---|---|---|
#18+
Алексей КSmith27пропущено... Меня всегда удивляли люди, которые, узнав что-то реально новое для себя , говорят, что они и так всегда это знали - это же, мол, очевидно. Ну вроде как всю жизнь проходишь на работу и с работы мимо чего-нибудь, а потом - РАЗ! - и только сейчас заметил какую-нибудь деталь.С чего ты взял, что в этом топике я узнал что-то новое? Да я не про тебя конкретно, а вообще. Есть такие люди. Ведь ещё 500 лет назад, или сколько там, всем было очевидно, что земля плоская и солнце вращается вокруг неё. Потому что в большинстве повседневных случаев земля и солнце именно так себя и вели. Доказать обратное можно было лишь очень редкими специальными случаями. Вот и с темой в первом посте - я очень редко встречал, чтобы закрытом методе класса создавался экземпляр этого же класса и вызывался закрытый же метод внось созданного экземпляра. А ты, наверное, очень часто с этим встречаешься? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2015, 07:46 |
|
Насчёт областей доступа - кто-нибудь знал об этом?
|
|||
---|---|---|---|
#18+
Можно джуниорам такие вопросы задавать на собеседованиях. )) Интересно, кто-нибудь из неджуниоров на форуме скажет, что для него это было что-то новое? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2015, 07:47 |
|
Насчёт областей доступа - кто-нибудь знал об этом?
|
|||
---|---|---|---|
#18+
Smith27Алексей Кпропущено... Я бы удивился, если бы это было не так. Меня всегда удивляли люди, которые, узнав что-то реально новое для себя, говорят, что они и так всегда это знали...Вам что, доступ к системе контроля версий дать, чтобы Вы убедились, что знаем и пользуемся? :) О чём топик? Открыли для себя что-то новое в языке, пойдите что-ли спецификацию почитайте: private (C# Reference) и 3.5 Member access ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2015, 07:47 |
|
Насчёт областей доступа - кто-нибудь знал об этом?
|
|||
---|---|---|---|
#18+
Smith27А ты, наверное, очень часто с этим встречаешься?Нет, но я знаю, что в документации пишут по этому поводу. Там ни слова про экземпляры. авторДоступ к закрытым членам можно получить только внутри тела класса или структуры, в которой они объявлены. Вложенные типы в том же теле могут также обращаться к таким закрытым членам. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2015, 07:50 |
|
Насчёт областей доступа - кто-нибудь знал об этом?
|
|||
---|---|---|---|
#18+
Вообще, в приведённых мной ссылках немало людей на вопрос "почему?" отвечают "потому что потому". - "Потому что создатели языка так захотели". Тут вот в чём штука. Фразу, что ограничение доступа распространяется на типы, НО НЕ НА ЭКЗЕМПЛЯРЫ ТИПОВ, я либо не встречал в явном виде, либо забыл. Явное указание, что это не распространяется на экземпляры типов я не нашёл (может, показет кто в спецификации?). А исходя из логических рассуждений, я перенёс свойства более всеобъемлющей сущности на менее всеобъемлющую. А оказалось, что НЕ НАДО РАССУЖДАТЬ, НАДО ТУПО СЛЕДОВАТЬ ЛОГИКЕ СОЗДАТЕЛЕЙ ЯЗЫКА. Т. е. если пытаться вывести некоторые свойства языка программирования логически, то очень часто будешь ошибаться, т. к. многие логические концепции принесены в жертву текущему моменту - удобству написания, отладки и т. п. Это я не о конкретных примерах щас и не о С# конкретно, а вообще. Ну, встречаются такие ситуации, когда ВРЕДНО ЛОГИЧЕСКИ МЫСЛИТЬ - НАДО ТУПО ЗАПОМИНАТЬ НЕЛОГИЧЕСКОЕ. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2015, 07:52 |
|
Насчёт областей доступа - кто-нибудь знал об этом?
|
|||
---|---|---|---|
#18+
Smith27Можно джуниорам такие вопросы задавать на собеседованиях. ))Такие вопросы на собеседованиях задавать не надо. Это вопрос, скорее, для передачи "Что. Где. Когда." ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2015, 07:53 |
|
Насчёт областей доступа - кто-нибудь знал об этом?
|
|||
---|---|---|---|
#18+
skyANAО чём топик? Открыли для себя что-то новое в языке, пойдите что-ли спецификацию почитайте: private (C# Reference) и 3.5 Member access Там нет нигде явного указания, что это распространяется на тип, НО НЕ НА ЭКЗЕМПЛЯР. Я привык, что в Америке разрешено всё, что не запрещено. А тут получается СССР - запрещено всё, что не разрешено. Ну, это шутки такие раньше были. Т. е. хотелось бы, чтобы проговаривали то, что конкретно нельзя. А то если самому додумывать - вот то и получается, что я выше написал. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2015, 07:56 |
|
Насчёт областей доступа - кто-нибудь знал об этом?
|
|||
---|---|---|---|
#18+
Smith27Вот и с темой в первом посте - я очень редко встречал, чтобы закрытом методе класса создавался экземпляр этого же класса и вызывался закрытый же метод внось созданного экземпляра. А ты, наверное, очень часто с этим встречаешься?Вы явно не уверены в своих рассуждениях :) Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
То есть по Вашему для того, что внутри метода Go должны быть одни правила, а для Equals другие? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2015, 07:59 |
|
Насчёт областей доступа - кто-нибудь знал об этом?
|
|||
---|---|---|---|
#18+
Smith27skyANAО чём топик? Открыли для себя что-то новое в языке, пойдите что-ли спецификацию почитайте: private (C# Reference) и 3.5 Member access Там нет нигде явного указания, что это распространяется на тип, НО НЕ НА ЭКЗЕМПЛЯР.Ну я же выше привёл цитату , там явно про это написано. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2015, 07:59 |
|
Насчёт областей доступа - кто-нибудь знал об этом?
|
|||
---|---|---|---|
#18+
Алексей КSmith27Можно джуниорам такие вопросы задавать на собеседованиях. ))Такие вопросы на собеседованиях задавать не надо. Это вопрос, скорее, для передачи "Что. Где. Когда." Я ссылки привёл на SO - там как минимум один комментарий сразу заметил от человека с 5-летним стажем работы, что он этого не знал. И вообще, насколько я знаю, на собеседованиях именно подобные вопросы и любят задавать новичкам - выдают список задачек, где сплошь именно такие случаи. Т. е. вроде бы самая элементарщина, которую ты должен в первый же год изучить, а на самом деле - тонкие моменты. Вот в ссылках, что skyANA дал, там всё тривиально, а на собеседованиях - то, что я написал в первом посте. В спецификации такого кода нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2015, 07:59 |
|
Насчёт областей доступа - кто-нибудь знал об этом?
|
|||
---|---|---|---|
#18+
Алексей КSmith27А ты, наверное, очень часто с этим встречаешься?Нет, но я знаю, что в документации пишут по этому поводу. Там ни слова про экземпляры. авторДоступ к закрытым членам можно получить только внутри тела класса или структуры, в которой они объявлены. Вложенные типы в том же теле могут также обращаться к таким закрытым членам. Вот именно, что ни слова. Ну признайся же, что ты сначала попробовал написать код, удивился, а потом просто запомнил, что ИМЕННО ВОТ ТАК - МОЖНО, хотя "там ни слова про экземпляры". Может, это было давно и ты подзабыл? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2015, 08:01 |
|
Насчёт областей доступа - кто-нибудь знал об этом?
|
|||
---|---|---|---|
#18+
Smith27Там нет нигде явного указания, что это распространяется на тип, НО НЕ НА ЭКЗЕМПЛЯР. Неужели? авторPrivate members are accessible only within the body of the class or the struct in which they are declared ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2015, 08:01 |
|
Насчёт областей доступа - кто-нибудь знал об этом?
|
|||
---|---|---|---|
#18+
skyANASmith27Вот и с темой в первом посте - я очень редко встречал, чтобы закрытом методе класса создавался экземпляр этого же класса и вызывался закрытый же метод внось созданного экземпляра. А ты, наверное, очень часто с этим встречаешься?Вы явно не уверены в своих рассуждениях :) Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
То есть по Вашему для того, что внутри метода Go должны быть одни правила, а для Equals другие? Я вообще чем больше живу, тем меньше в чём-нибудь уверен. Я щас не помню и свой код не найду - я, вроде, всего несколько раз переопределял Equals, и было это давно. А что, если бы id было полем с публичным доступом? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2015, 08:04 |
|
Насчёт областей доступа - кто-нибудь знал об этом?
|
|||
---|---|---|---|
#18+
Smith27skyANAО чём топик? Открыли для себя что-то новое в языке, пойдите что-ли спецификацию почитайте: private (C# Reference) и 3.5 Member access Там нет нигде явного указания, что это распространяется на тип, НО НЕ НА ЭКЗЕМПЛЯР. Я привык, что в Америке разрешено всё, что не запрещено. А тут получается СССР - запрещено всё, что не разрешено. Ну, это шутки такие раньше были. Т. е. хотелось бы, чтобы проговаривали то, что конкретно нельзя . А то если самому додумывать - вот то и получается, что я выше написал.Вы сами себя запутываете? :) Сказано же, что: If the declared accessibility of M is private, the accessibility domain of M is the program text of T. Если бы конкртено нельзя было иметь доступ к M, через экземпляр T внутри тела T, то это бы "проговорили". ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2015, 08:04 |
|
Насчёт областей доступа - кто-нибудь знал об этом?
|
|||
---|---|---|---|
#18+
Smith27kmawа еще в классе можно вызывать статические методы без указания имени класса Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
Вот это как раз для меня было овечидно. Правда, в самом начале я тоже всегда указывал имя класса, а потом узнал, что можно и без него. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2015, 08:04 |
|
Насчёт областей доступа - кто-нибудь знал об этом?
|
|||
---|---|---|---|
#18+
Smith27И вообще, насколько я знаю, на собеседованиях именно подобные вопросы и любят задавать новичкам - выдают список задачек, где сплошь именно такие случаи.Ну мы ведь не обязаны соглашаться с устроителями этих собеседований. У нас есть собственное мнение, не так ли? :-) Тут вопрос не в статистике применения, а в наличии практической пользы. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2015, 08:07 |
|
Насчёт областей доступа - кто-нибудь знал об этом?
|
|||
---|---|---|---|
#18+
Нет, ну вот смотрите http://stackoverflow.com/a/6983855 Чел со многими тысячами очков репутации, пишет, что "он думает" - "I think one reason it works this way is because access modifiers work at compile time". Т. е. докагаться догически до этой штуки трудно - логически как раз вытекает, что доступ должен быть ограничен и на уровне экземпляров. Т. е. надо, чтоб прямо сказали на такое свойство, а начнёшь логически думать - попадёшь в ловушку. Я в такие ловушки не только в программировании попадал. Все эти формальные логики, созданные человеком, всегда внутренне где-то противоречивы и "читерят". ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2015, 08:09 |
|
|
start [/forum/topic.php?fid=20&fpage=72&tid=1401033]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
others: | 18ms |
total: | 161ms |
0 / 0 |