Здравствуйте Гость [ Вход | Регистрация ] | Форум в сети 6727-й день

Шановні користувачі! Запрошуємо вас до офіційного телеграм-канала 0day Community. Тут ви зможете поспілкуватися одне з одним та дізнатися про останні новини щодо роботи ресурса, поставити запитання до адміністрації, тощо. Перейти до телеграм-канала можна відсканувавши QR-код або натиснувши на посилання: @zeroday_ua

 C# для новичков, вопросы и ответы

Tyomniy
May 3 2008, 13:06
  
Пост #1



Репутация:   5  
Дух


Группа: Пользователи
Сообщений: 24
С нами с: 3-June 07


Тут я предлагаю все новичкам программирования на C# выкладывать свои вопросы. По возможности, я думаю, все кто в этом что-то шарит будут стараться отвечать !

Тема для обговорення мови програмування C#, всі сторонні коментарі будуть видалятися, а їх автори отримувати %

Сообщение отредактировал BoyKot - Jun 11 2008, 20:40
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
14 Страницы  « < 11 12 13 14 >  
Reply to this topicStart new topic
Ответов(240 - 259)
JONSON
Mar 24 2015, 14:10
  
Пост #241



Репутация:   176  
Постоялец
***

Группа: Пользователи
Сообщений: 1 057
С нами с: 17-January 08


del

Сообщение отредактировал JONSON - Aug 14 2015, 10:38
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
JONSON
Apr 2 2015, 11:39
  
Пост #242



Репутация:   176  
Постоялец
***

Группа: Пользователи
Сообщений: 1 057
С нами с: 17-January 08


del

Сообщение отредактировал JONSON - Aug 14 2015, 10:38
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
JONSON
May 8 2015, 15:56
  
Пост #243



Репутация:   176  
Постоялец
***

Группа: Пользователи
Сообщений: 1 057
С нами с: 17-January 08


не актуально smile.gif

Сообщение отредактировал JONSON - May 18 2015, 11:46
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Lonnieduh
Jun 23 2015, 17:50
  
Пост #244


Незарегистрированный







Приветствую

Кто-нибудь сталкивался с разработкой ActiveX компонентов для IE. С чего начать, на чем это все пишется?
Go to the top of the page
+Quote Post
грик
Aug 3 2015, 14:39
  
Пост #245



Репутация:   2  
Активист
*

Группа: Пользователи
Сообщений: 267
С нами с: 20-October 13


Такой вопрос: если экземпляры классов хранятся в куче, то я правильно понимаю, что статические классы, для которых не могут создаваться экземпляры, будут хранится в стеке?

Сообщение отредактировал грик - Aug 3 2015, 15:04
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Phaust
Aug 3 2015, 17:34
  
Пост #246



Репутация:   1176  
сам себе авторитет
******

Группа: Пользователи
Сообщений: 14 114
С нами с: 9-July 07


(грик @ Aug 3 2015, 14:39) Перейти к цитате

Такой вопрос: если экземпляры классов хранятся в куче, то я правильно понимаю, что статические классы, для которых не могут создаваться экземпляры, будут хранится в стеке?

Нет, не будут.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
aidanpraid
Aug 3 2015, 20:43
  
Пост #247



Репутация:   61  
Я чувствую силу
*

Группа: Пользователи
Сообщений: 466
С нами с: 29-May 09


(грик @ Aug 3 2015, 15:39) Перейти к цитате

Такой вопрос: если экземпляры классов хранятся в куче, то я правильно понимаю, что статические классы, для которых не могут создаваться экземпляры, будут хранится в стеке?

они нигде хранится не будут. это вспомагательный класс. он не занимает места в памяти
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
грик
Aug 3 2015, 21:33
  
Пост #248



Репутация:   2  
Активист
*

Группа: Пользователи
Сообщений: 267
С нами с: 20-October 13


(Phaust @ Aug 3 2015, 18:34) Перейти к цитате

Нет, не будут.



(aidanpraid @ Aug 3 2015, 21:43) Перейти к цитате

они нигде хранится не будут. это вспомагательный класс. он не занимает места в памяти

Понял, спасибо.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Phaust
Aug 4 2015, 19:23
  
Пост #249



Репутация:   1176  
сам себе авторитет
******

Группа: Пользователи
Сообщений: 14 114
С нами с: 9-July 07


(aidanpraid @ Aug 3 2015, 20:43) Перейти к цитате

они нигде хранится не будут. это вспомагательный класс. он не занимает места в памяти

Бред
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
грик
Aug 6 2015, 15:27
  
Пост #250



Репутация:   2  
Активист
*

Группа: Пользователи
Сообщений: 267
С нами с: 20-October 13


(Phaust @ Aug 4 2015, 20:23) Перейти к цитате

Бред

Я правильно понимаю, что единственное место, где на физическом уровне хранится статический класс (не переменные этого класса, а именно сам класс, оболочка, если можно так выразиться) - это метаданные типа?
И ещё такой вопрос на счет явной реализации членов интерфейса: почему к ним в классе нельзя обратиться через this, ведь они по книге Троелсена "неявно закрытые", в чем смысл этого ограничения? (можно обратиться только приведя объект к типу интерфейса)

Сообщение отредактировал грик - Aug 6 2015, 16:20
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Phaust
Aug 8 2015, 17:51
  
Пост #251



Репутация:   1176  
сам себе авторитет
******

Группа: Пользователи
Сообщений: 14 114
С нами с: 9-July 07


(грик @ Aug 6 2015, 15:27) Перейти к цитате

Я правильно понимаю, что единственное место, где на физическом уровне хранится статический класс (не переменные этого класса, а именно сам класс, оболочка, если можно так выразиться) - это метаданные типа?
И ещё такой вопрос на счет явной реализации членов интерфейса: почему к ним в классе нельзя обратиться через this, ведь они по книге Троелсена "неявно закрытые", в чем смысл этого ограничения? (можно обратиться только приведя объект к типу интерфейса)


По моему, спутано все что можно. Что где в какой момент на каком уровне хранится? Ничего не понял. Вы же не думаете что каждый раз когда вы вызываете метод статического класса происходит обращения к диску?


Собачье сердце - Кто на ком стоял?..


Именно сам класс на физическом уровне храниться в файле .cs на накопителе. Экземпляр храниться в куче в памяти.

Второй вопрос вообще не понял, это типа так?

Open in new windowIPB Image

Сообщение отредактировал Phaust - Aug 8 2015, 17:58
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Carnifex
Aug 9 2015, 22:35
  
Пост #252



Репутация:   16  
Дух


Группа: Пользователи
Сообщений: 179
С нами с: 5-July 09


Давайте так. Дабы не было путаницы. Ты пишешь код. После того как ты нажимаешь кнопку Run компилятор перегоняет его в так называемый Intermediate Language. Потом в машинный код называемый Executable тоесть, по-простому, *.exe. Это простой случай. Касательно классов, они(точнее их объекты), как ссылочные типы, размещаются в управляемой куче (это кусок оперативной памяти). При этом обычные объекты обычных классов размещаются в куче при вызове их конструктора (с исп. new), а статические поля (или даже статические классы) размещаются в High Frequency Heap (высокочастотная куча) после вызова их статических инициализаторов в текстовом порядке (по очереди короче), в момент их вызова или, при наличии статического конструктора, сразу перед вызовом конструктора. В стек (это тоже кусок оперативной памяти, выделяемый операционкой каждому процессу), кстати, идут ссылки на объекты, размещенные в куче. На жестком всегда находится только код. С метаданными в отдельном файле, преобразованный в машинный или в обычном виде, как угодно, но это всегда код. Может быть создана *.dll - но это тоже код.
По поводу this. На данном этапе, не вдаваясь в подробности реализации индексаторов и методов расширения, я рекомендую рассматривать его как ссылку на ЭКЗЕМПЛЯР (ОБЪЕКТ) текущего типа, в котором вы сейчас пишете Ваш код. Написать в коде this - все равно что вызвать конструктор типа и работать уже с объектом.
Если запутались с интерфейсами, рассмотрите их просто как обещание. Обещание того, что класс, который их наследует, будет иметь такие же поля и методы, только уже с реализацией (тоесть с телом) и не приплетайте туда this.

Сообщение отредактировал Carnifex - Aug 9 2015, 22:44
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Phaust
Aug 10 2015, 21:48
  
Пост #253



Репутация:   1176  
сам себе авторитет
******

Группа: Пользователи
Сообщений: 14 114
С нами с: 9-July 07


После того как ты нажимаешь кнопку Run компилятор перегоняет его в так называемый Intermediate Language. Потом в машинный код называемый Executable тоесть, по-простому, *.exe.

Это не корректное объяснение. Компилятор компилирует сборки, после чего runtime их загружает и работает с ними. Если не забираться в дебри как то PE/COFF заголовки - процесс неплохо показан здесь http://www.telerik.com/blogs/understanding...ime-compilation


На жестком всегда находится только код. С метаданными в отдельном файле, преобразованный в машинный или в обычном виде, как угодно, но это всегда код. Может быть создана *.dll - но это тоже код.

ngen же https://msdn.microsoft.com/en-us/library/6t...ror=-2147217396

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


Stack frame в clr выделяет под вызов метода. Если мы лезем в дебри то тут надо бы припомнить что каждый процесс имеет свое VAS(и PFD держим в уме) и что есть такой Memory menager,и вообще что кто его знает где эта память была выделена. И про версию CLR помним...

Итого,я рекомендую не лезть в дебри, а писать код. Для начала.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Carnifex
Aug 11 2015, 19:29
  
Пост #254



Репутация:   16  
Дух


Группа: Пользователи
Сообщений: 179
С нами с: 5-July 09


Данке за линки. Почитаемс.... d.gif

А стек мне все равно легче было представить в виде пула адресов в оперативе, выделяемых процессу. Сразу картинка в голове рисуется - гораздо проще учить было. Это как представить ThreadPool с задачами, адресуемыми ему в виде ворот и стада овец)))

Сообщение отредактировал Carnifex - Aug 11 2015, 19:47
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Phaust
Aug 11 2015, 21:07
  
Пост #255



Репутация:   1176  
сам себе авторитет
******

Группа: Пользователи
Сообщений: 14 114
С нами с: 9-July 07


Отличная книжка: http://download.red-gate.com/ebooks/DotNet..._Management.pdf

Если, конечно, держать в уме то, что CLR все таки некий уровень абстракции
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
грик
Aug 12 2015, 11:49
  
Пост #256



Репутация:   2  
Активист
*

Группа: Пользователи
Сообщений: 267
С нами с: 20-October 13


(Phaust @ Aug 8 2015, 18:51) Перейти к цитате

По моему, спутано все что можно. Что где в какой момент на каком уровне хранится? Ничего не понял.

Я имел ввиду после компиляции. Действительно, лучше пока не буду лезть в такие дебри.
(Phaust @ Aug 8 2015, 18:51) Перейти к цитате

Второй вопрос вообще не понял, это типа так?

Нет, это вот так:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «

В чем смысл такого ограничения?

Сообщение отредактировал грик - Aug 12 2015, 11:59
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Carnifex
Aug 12 2015, 22:59
  
Пост #257



Репутация:   16  
Дух


Группа: Пользователи
Сообщений: 179
С нами с: 5-July 09


Все достаточно просто. Усли учитывать что this - ссылка на объект текущего класса (тоесть на экземпляр считай), то в первом случае не компилится, потому что ты в этом объекте ищешь какой-то экземплярный интерфейс, которого там нет и не может быть. А во втором случае все просто и почти адекватно. Ты обращаешься к экземпляру класса (приводя его к интерфейсу, что, по сути, говорит "тип, экземпляр которого указан ключевым словом this должен реализовывать такой-то интерфейс") и вызываешь из него метод, который в нем реализован. Классический вызов метода. Если не считать порнографии с участием this и интерфейса.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
грик
Aug 12 2015, 23:07
  
Пост #258



Репутация:   2  
Активист
*

Группа: Пользователи
Сообщений: 267
С нами с: 20-October 13


(Carnifex @ Aug 12 2015, 23:59) Перейти к цитате

Если не считать порнографии с участием this и интерфейса.

Это мне и не нравится. Есть какой-то способ обратиться к каждому из методов Do(), не используя приведения к интерфейсу?
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Carnifex
Aug 13 2015, 10:23
  
Пост #259



Репутация:   16  
Дух


Группа: Пользователи
Сообщений: 179
С нами с: 5-July 09


Я до сих пор не очень понимаю зачем создавать два интерфейса с одинаковыми сигнатурами внутри, но ладно. Обратиться к методам класса внутри класса можно просто по имени метода. Безо всякого this.
this внутри класса мог бы применяться для спецификации полей с одинаковыми именами (в самом простом виде) но зачем его было писать для спецификации методов с и так неодинаковыми именами я особо не понимаю. Да и с одинаковыми именами, но разными сигнатурами тоже его не используют, методы, ведь, допускают полиморфное поведение (перегрузки).
В конечном счете, рассуждая логически, если метод и так виден внутри класса, то, стало быть, зачем явно указывать что это экземплярный метод этого же класса?

Сообщение отредактировал Carnifex - Aug 13 2015, 10:30
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
грик
Aug 13 2015, 11:48
  
Пост #260



Репутация:   2  
Активист
*

Группа: Пользователи
Сообщений: 267
С нами с: 20-October 13


(Carnifex @ Aug 13 2015, 11:23) Перейти к цитате

Я до сих пор не очень понимаю зачем создавать два интерфейса с одинаковыми сигнатурами внутри, но ладно.

В базовых библиотеках .NET есть интерфейсы, в которых одинаковые названия методов. Да и пример, когда это логично, можно придумать.
(Carnifex @ Aug 13 2015, 11:23) Перейти к цитате

Безо всякого this.

Действительно, не знаю, почему так писал.
(Carnifex @ Aug 13 2015, 11:23) Перейти к цитате

В конечном счете, рассуждая логически, если метод и так виден внутри класса, то, стало быть, зачем явно указывать что это экземплярный метод этого же класса?

Не понял. Все равно вот так не работает:
1) Do(); (понятное дело, он не понимает, какой из методов нужно вызывать)
2) ISmth2.Do();

Сообщение отредактировал грик - Aug 13 2015, 11:49
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

14 Страницы  « < 11 12 13 14 >
Reply to this topicStart new topic

 



- Упрощённая версия
Сейчас: 15th August 2024 - 4:09
Сайт не розміщує електронні версії творів, а займається лише колекціонуванням та каталогізацією посилань, що публікуються нашими користувачами. Якщо Ви є правовласником якоїсь частини опублікованого матеріалу та не бажаєте, щоб посилання на нього знаходилось в нашому каталозі, зв’яжіться з нами і ми видалимо його. Файли для обміну надані користувачами сайту і адміністрація не несе відповідальності за їх вміст.