Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Насчёт областей доступа - кто-нибудь знал об этом? / 25 сообщений из 89, страница 1 из 4
20.11.2015, 07:25
    #39108465
Smith27
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчёт областей доступа - кто-нибудь знал об этом?
Код: c#
1.
2.
3.
4.
5.
6.
7.
class TestClass
{
    void Go()
    {
        new TestClass().Go(); // вызывается нормально
    }
}



Если в текущем классе создать экземпляр текущего же класса, то можно вызвать закрытый метод вновь созданного экземпляра.

Ведь я же вызываю не метод текущего экземпляра, а метод нового экземпляра.

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# и не знал об этом". Сам тоже попробовал написать вызов закрытого метода внутри этого же метода из другого экземпляра - и получилось. Я удивился.
...
Рейтинг: 0 / 0
20.11.2015, 07:28
    #39108466
Smith27
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчёт областей доступа - кто-нибудь знал об этом?
Почему-то всегда казалось, что ограничение доступа распространяется и на экземпляры типа, а не только на сами типы - ну, по принципу, что сущность "тип" является надсущностью "экземпляр" и вроде как должна наследовать её свойства, если рассуждать логически.
...
Рейтинг: 0 / 0
20.11.2015, 07:30
    #39108467
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчёт областей доступа - кто-нибудь знал об этом?
Smith27Я удивился.Я бы удивился, если бы это было не так.
...
Рейтинг: 0 / 0
20.11.2015, 07:35
    #39108468
Smith27
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчёт областей доступа - кто-нибудь знал об этом?
То же самое касается и того, что если объявить два приватных класса в одном пространстве имёт, то в этих классах можно создавать экземпляры друг друга.
...
Рейтинг: 0 / 0
20.11.2015, 07:40
    #39108470
Smith27
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчёт областей доступа - кто-нибудь знал об этом?
Алексей КSmith27Я удивился.Я бы удивился, если бы это было не так.
Меня всегда удивляли люди, которые, узнав что-то реально новое для себя, говорят, что они и так всегда это знали - это же, мол, очевидно. Ну вроде как всю жизнь проходишь на работу и с работы мимо чего-нибудь, а потом - РАЗ! - и только сейчас заметил какую-нибудь деталь.

Для меня, например, неочевидно было, что корова, чтобы давать молоко, должна быть всегда беременна или находиться на этапе кормления телёнка. В детстве всегда пил молоко парное. Сам, естественно, не доил. Знал только, что оно из вымени берётся, но как оно там оказывается и при каких условиях - не знал. Почему-то казалось, что корова ВСЕГДА должна давать молоко, и без всяких беременностей - уж такое она животное. Несмотря на все оговорки, что она млекопитающее, и аналогии с женщинами. )))

Из разряда невероятное-очевидное.
...
Рейтинг: 0 / 0
20.11.2015, 07:41
    #39108471
kmaw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчёт областей доступа - кто-нибудь знал об этом?
а еще в классе можно вызывать статические методы без указания имени класса
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
class C
{
   static void A();
   void a()
   {
      A();//C.A()
   }
}
...
Рейтинг: 0 / 0
20.11.2015, 07:42
    #39108472
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчёт областей доступа - кто-нибудь знал об этом?
Smith27Алексей Кпропущено...
Я бы удивился, если бы это было не так.
Меня всегда удивляли люди, которые, узнав что-то реально новое для себя , говорят, что они и так всегда это знали - это же, мол, очевидно. Ну вроде как всю жизнь проходишь на работу и с работы мимо чего-нибудь, а потом - РАЗ! - и только сейчас заметил какую-нибудь деталь.С чего ты взял, что в этом топике я узнал что-то новое?
...
Рейтинг: 0 / 0
20.11.2015, 07:43
    #39108473
Smith27
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчёт областей доступа - кто-нибудь знал об этом?
kmawа еще в классе можно вызывать статические методы без указания имени класса
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
class C
{
   static void A();
   void a()
   {
      A();//C.A()
   }
}



Вот это как раз для меня было овечидно.
...
Рейтинг: 0 / 0
20.11.2015, 07:46
    #39108474
Smith27
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчёт областей доступа - кто-нибудь знал об этом?
Алексей КSmith27пропущено...

Меня всегда удивляли люди, которые, узнав что-то реально новое для себя , говорят, что они и так всегда это знали - это же, мол, очевидно. Ну вроде как всю жизнь проходишь на работу и с работы мимо чего-нибудь, а потом - РАЗ! - и только сейчас заметил какую-нибудь деталь.С чего ты взял, что в этом топике я узнал что-то новое?
Да я не про тебя конкретно, а вообще. Есть такие люди.

Ведь ещё 500 лет назад, или сколько там, всем было очевидно, что земля плоская и солнце вращается вокруг неё. Потому что в большинстве повседневных случаев земля и солнце именно так себя и вели. Доказать обратное можно было лишь очень редкими специальными случаями.

Вот и с темой в первом посте - я очень редко встречал, чтобы закрытом методе класса создавался экземпляр этого же класса и вызывался закрытый же метод внось созданного экземпляра. А ты, наверное, очень часто с этим встречаешься?
...
Рейтинг: 0 / 0
20.11.2015, 07:47
    #39108475
Smith27
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчёт областей доступа - кто-нибудь знал об этом?
Можно джуниорам такие вопросы задавать на собеседованиях. ))

Интересно, кто-нибудь из неджуниоров на форуме скажет, что для него это было что-то новое?
...
Рейтинг: 0 / 0
20.11.2015, 07:47
    #39108476
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчёт областей доступа - кто-нибудь знал об этом?
Smith27Алексей Кпропущено...
Я бы удивился, если бы это было не так.
Меня всегда удивляли люди, которые, узнав что-то реально новое для себя, говорят, что они и так всегда это знали...Вам что, доступ к системе контроля версий дать, чтобы Вы убедились, что знаем и пользуемся? :)

О чём топик? Открыли для себя что-то новое в языке, пойдите что-ли спецификацию почитайте:

private (C# Reference) и 3.5 Member access
...
Рейтинг: 0 / 0
20.11.2015, 07:50
    #39108477
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчёт областей доступа - кто-нибудь знал об этом?
Smith27А ты, наверное, очень часто с этим встречаешься?Нет, но я знаю, что в документации пишут по этому поводу. Там ни слова про экземпляры.
авторДоступ к закрытым членам можно получить только внутри тела класса или структуры, в которой они объявлены. Вложенные типы в том же теле могут также обращаться к таким закрытым членам.
...
Рейтинг: 0 / 0
20.11.2015, 07:52
    #39108479
Smith27
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчёт областей доступа - кто-нибудь знал об этом?
Вообще, в приведённых мной ссылках немало людей на вопрос "почему?" отвечают "потому что потому". - "Потому что создатели языка так захотели".

Тут вот в чём штука. Фразу, что ограничение доступа распространяется на типы, НО НЕ НА ЭКЗЕМПЛЯРЫ ТИПОВ, я либо не встречал в явном виде, либо забыл. Явное указание, что это не распространяется на экземпляры типов я не нашёл (может, показет кто в спецификации?). А исходя из логических рассуждений, я перенёс свойства более всеобъемлющей сущности на менее всеобъемлющую. А оказалось, что НЕ НАДО РАССУЖДАТЬ, НАДО ТУПО СЛЕДОВАТЬ ЛОГИКЕ СОЗДАТЕЛЕЙ ЯЗЫКА.

Т. е. если пытаться вывести некоторые свойства языка программирования логически, то очень часто будешь ошибаться, т. к. многие логические концепции принесены в жертву текущему моменту - удобству написания, отладки и т. п. Это я не о конкретных примерах щас и не о С# конкретно, а вообще. Ну, встречаются такие ситуации, когда ВРЕДНО ЛОГИЧЕСКИ МЫСЛИТЬ - НАДО ТУПО ЗАПОМИНАТЬ НЕЛОГИЧЕСКОЕ.
...
Рейтинг: 0 / 0
20.11.2015, 07:53
    #39108480
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчёт областей доступа - кто-нибудь знал об этом?
Smith27Можно джуниорам такие вопросы задавать на собеседованиях. ))Такие вопросы на собеседованиях задавать не надо. Это вопрос, скорее, для передачи "Что. Где. Когда."
...
Рейтинг: 0 / 0
20.11.2015, 07:56
    #39108484
Smith27
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчёт областей доступа - кто-нибудь знал об этом?
skyANAО чём топик? Открыли для себя что-то новое в языке, пойдите что-ли спецификацию почитайте:

private (C# Reference) и 3.5 Member access

Там нет нигде явного указания, что это распространяется на тип, НО НЕ НА ЭКЗЕМПЛЯР.

Я привык, что в Америке разрешено всё, что не запрещено. А тут получается СССР - запрещено всё, что не разрешено. Ну, это шутки такие раньше были.

Т. е. хотелось бы, чтобы проговаривали то, что конкретно нельзя. А то если самому додумывать - вот то и получается, что я выше написал.
...
Рейтинг: 0 / 0
20.11.2015, 07:59
    #39108485
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчёт областей доступа - кто-нибудь знал об этом?
Smith27Вот и с темой в первом посте - я очень редко встречал, чтобы закрытом методе класса создавался экземпляр этого же класса и вызывался закрытый же метод внось созданного экземпляра. А ты, наверное, очень часто с этим встречаешься?Вы явно не уверены в своих рассуждениях :)

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
class TestClass
{
    private int id;

    void Go()
    {
        new TestClass().Go(); // вызывается нормально
    }

    public override bool Equals(object obj)
    {
        var t = obj as TestClass;

        if (t == null)
        {
            return false;
        }

        return this.id == t.id;
    }
}



То есть по Вашему для того, что внутри метода Go должны быть одни правила, а для Equals другие?
...
Рейтинг: 0 / 0
20.11.2015, 07:59
    #39108486
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчёт областей доступа - кто-нибудь знал об этом?
Smith27skyANAО чём топик? Открыли для себя что-то новое в языке, пойдите что-ли спецификацию почитайте:

private (C# Reference) и 3.5 Member access

Там нет нигде явного указания, что это распространяется на тип, НО НЕ НА ЭКЗЕМПЛЯР.Ну я же выше привёл цитату , там явно про это написано.
...
Рейтинг: 0 / 0
20.11.2015, 07:59
    #39108487
Smith27
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчёт областей доступа - кто-нибудь знал об этом?
Алексей КSmith27Можно джуниорам такие вопросы задавать на собеседованиях. ))Такие вопросы на собеседованиях задавать не надо. Это вопрос, скорее, для передачи "Что. Где. Когда."
Я ссылки привёл на SO - там как минимум один комментарий сразу заметил от человека с 5-летним стажем работы, что он этого не знал.

И вообще, насколько я знаю, на собеседованиях именно подобные вопросы и любят задавать новичкам - выдают список задачек, где сплошь именно такие случаи. Т. е. вроде бы самая элементарщина, которую ты должен в первый же год изучить, а на самом деле - тонкие моменты. Вот в ссылках, что skyANA дал, там всё тривиально, а на собеседованиях - то, что я написал в первом посте. В спецификации такого кода нет.
...
Рейтинг: 0 / 0
20.11.2015, 08:01
    #39108488
Smith27
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчёт областей доступа - кто-нибудь знал об этом?
Алексей КSmith27А ты, наверное, очень часто с этим встречаешься?Нет, но я знаю, что в документации пишут по этому поводу. Там ни слова про экземпляры.
авторДоступ к закрытым членам можно получить только внутри тела класса или структуры, в которой они объявлены. Вложенные типы в том же теле могут также обращаться к таким закрытым членам.
Вот именно, что ни слова.

Ну признайся же, что ты сначала попробовал написать код, удивился, а потом просто запомнил, что ИМЕННО ВОТ ТАК - МОЖНО, хотя "там ни слова про экземпляры". Может, это было давно и ты подзабыл?
...
Рейтинг: 0 / 0
20.11.2015, 08:01
    #39108489
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчёт областей доступа - кто-нибудь знал об этом?
Smith27Там нет нигде явного указания, что это распространяется на тип, НО НЕ НА ЭКЗЕМПЛЯР.
Неужели?
авторPrivate members are accessible only within the body of the class or the struct in which they are declared
...
Рейтинг: 0 / 0
20.11.2015, 08:04
    #39108490
Smith27
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчёт областей доступа - кто-нибудь знал об этом?
skyANASmith27Вот и с темой в первом посте - я очень редко встречал, чтобы закрытом методе класса создавался экземпляр этого же класса и вызывался закрытый же метод внось созданного экземпляра. А ты, наверное, очень часто с этим встречаешься?Вы явно не уверены в своих рассуждениях :)

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
class TestClass
{
    private int id;

    void Go()
    {
        new TestClass().Go(); // вызывается нормально
    }

    public override bool Equals(object obj)
    {
        var t = obj as TestClass;

        if (t == null)
        {
            return false;
        }

        return this.id == t.id;
    }
}



То есть по Вашему для того, что внутри метода Go должны быть одни правила, а для Equals другие?
Я вообще чем больше живу, тем меньше в чём-нибудь уверен.

Я щас не помню и свой код не найду - я, вроде, всего несколько раз переопределял Equals, и было это давно. А что, если бы id было полем с публичным доступом?
...
Рейтинг: 0 / 0
20.11.2015, 08:04
    #39108491
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчёт областей доступа - кто-нибудь знал об этом?
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, то это бы "проговорили".
...
Рейтинг: 0 / 0
20.11.2015, 08:04
    #39108494
Smith27
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчёт областей доступа - кто-нибудь знал об этом?
Smith27kmawа еще в классе можно вызывать статические методы без указания имени класса
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
class C
{
   static void A();
   void a()
   {
      A();//C.A()
   }
}



Вот это как раз для меня было овечидно.
Правда, в самом начале я тоже всегда указывал имя класса, а потом узнал, что можно и без него.
...
Рейтинг: 0 / 0
20.11.2015, 08:07
    #39108495
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчёт областей доступа - кто-нибудь знал об этом?
Smith27И вообще, насколько я знаю, на собеседованиях именно подобные вопросы и любят задавать новичкам - выдают список задачек, где сплошь именно такие случаи.Ну мы ведь не обязаны соглашаться с устроителями этих собеседований. У нас есть собственное мнение, не так ли? :-)

Тут вопрос не в статистике применения, а в наличии практической пользы.
...
Рейтинг: 0 / 0
20.11.2015, 08:09
    #39108496
Smith27
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насчёт областей доступа - кто-нибудь знал об этом?
Нет, ну вот смотрите

http://stackoverflow.com/a/6983855

Чел со многими тысячами очков репутации, пишет, что "он думает" - "I think one reason it works this way is because access modifiers work at compile time". Т. е. докагаться догически до этой штуки трудно - логически как раз вытекает, что доступ должен быть ограничен и на уровне экземпляров. Т. е. надо, чтоб прямо сказали на такое свойство, а начнёшь логически думать - попадёшь в ловушку.

Я в такие ловушки не только в программировании попадал. Все эти формальные логики, созданные человеком, всегда внутренне где-то противоречивы и "читерят".
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Насчёт областей доступа - кто-нибудь знал об этом? / 25 сообщений из 89, страница 1 из 4
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]