|
|
|||||||||||
.NET 4.x Static методы и классы20.12.2016, 19:57. Показов 4745. Ответов 39
Метки нет (Все метки)
Если метод в нестатичном классе помечен как static, что будет с памятью после выполнения вот такого метода?
К примеру:
0
|
|||||||||||
| 20.12.2016, 19:57 | |
|
Ответы с готовыми решениями:
39
Классы и методы |
|
Администратор
|
|||
| 20.12.2016, 23:23 | |||
|
0
|
|||
|
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
|
||
| 20.12.2016, 23:31 | ||
System.Type. Вот этому экземпляру и принадлежит этот метод Calculate как и вообще все методы, определённые в SomeClass (хоть статические хоть нет).
1
|
||
|
Администратор
|
|
| 20.12.2016, 23:34 | |
|
TopLayer, этим объяснением ты только путаешь ТСа. Экземпляры Type и экземпляры класса это две разные вещи. Конкретно при вызове static методов Type никак не учавствует т.к. вызов static метода это банальный jmp в ассемблере.
0
|
|
|
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
|
|
| 20.12.2016, 23:34 | |
|
Другое дело, что вызов нестатических методов без экземпляра
new SomeClass() не допускается еще на стадии компиляции программы.
0
|
|
|
|
|||||||
| 20.12.2016, 23:41 [ТС] | |||||||
|
OwenGlendower, особо можешь не повторять, если считаешь что одного раза было достаточно.
--------------- ![]() Согласно этой страничке
И далее
Добавлено через 2 минуты Добавлено через 2 минуты
0
|
|||||||
|
Администратор
|
|||
| 20.12.2016, 23:45 | |||
|
P.S. Советую не читать русский MSDN. Раньше они переводили его вручную. Сейчас же он переводится автоматически и очень плохо к сожалению.
1
|
|||
|
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
|
|||
| 20.12.2016, 23:46 | |||
|
0
|
|||
|
Администратор
|
|||
| 20.12.2016, 23:48 | |||
|
Добавлено через 1 минуту
0
|
|||
|
|
||
| 20.12.2016, 23:53 [ТС] | ||
|
и другой: Что тогда является экземпляром для статического метода? Добавлено через 55 секунд Или у статического метода НЕТ экземпляра принадлежности?
0
|
||
|
Администратор
|
|
| 20.12.2016, 23:54 | |
|
0
|
|
|
Администратор
|
|
| 21.12.2016, 00:00 | |
|
skilllab, и снова ответ - ничего.
0
|
|
|
|
|
| 21.12.2016, 00:16 [ТС] | |
|
Хммм...хитрО всё.
Тогда возвращаясь к первому сообщению: если я хочу создать класс-утилиту, задача которого это модифицировать коллекцию с помощью вызовов из неуправляемой памяти и используя объекты неуправляемой памяти вперемешку с управляемой, при этом используется частые вызовы к этой неуправляемой памяти (к некоему объекту вне программы) лучшим решением будет: 1) создать экземплярный класс с экземплярными методами. После выполнения методов среда сама разберётся что и как и когда удалять. Вручную я даже GC вызывать не буду. 2) создать экземплярный класс но с неэкземплярными методами (статичными). Это упростит вызов из основного кода программы. Напоминаю, класс - утилита. Он не является чьим то предком и не будет являться родителем. 3) создать статичный класс с автоматом статичными методами. Скорость играет вторую роль по значению, ибо визуальная часть программы итак кушает немало, а тут ещё и всё вот это))) При всём при этом я чуток беспокоюсь за освобождение памяти самой средой. И даже не столько за освобождение, а за повторное использование (ну вот чёрт знает как там внутри всё работает) значений ссылочных переменных. Ибо это приведёт к AccesViolation.
0
|
|
|
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
|
||||||||||||||||
| 21.12.2016, 00:23 | ||||||||||||||||
|
Кликните здесь для просмотра всего текста
Короче, надоело это жонглирование формулировками, как хрен не назови он хрен и есть.
Объясню так: метод - это указатель на код, то есть на последовательность каких-то инструкций. Этому указателю ничего не надо для счастья. Пусть дан класс:
void SomeClass.StaticMethod(int x)Второй метод, по сути, выглядит так: void SomeClass.InstanceMethod(SomeClass this, int x) (Принимает 2 аргумента а не 1)Причём для второго метода компилятор C# заставляет нас явно указывать конкретный объект this с помощью удобного синтаксиса:
SomeClass. (обязательно только для внешнего по отношению к классу кода):
2
|
||||||||||||||||
|
Администратор
|
|
| 21.12.2016, 00:24 | |
|
skilllab, не зная деталей взаимодействия с неуправляемым кодом трудно давать совет. Разве что самый общий. Что класс с экземплярными членами создается когда есть смысл в наличии этого экземпляра. Если смысла в наличии экземпляра класса нет, то лучше использовать static класс. Взять например System.Console. Почему он объявлн как статический? Потому что консоль в приложении может быть только одна. А раз так значит не нужно отличать одну консоль от другой и следовательно не нужны экземпляры класса Console.
1
|
|
|
|
||||
| 21.12.2016, 00:31 [ТС] | ||||
|
Тогда может быть на ночь глядя))) в двух словах скажете о 2) и 3) пунктах? Ну, различия. У меня сейчас 2 публичных метода и штук 10 приватных. Экземпляр класса точно не нужен. Вопрос: делать ли сам класс статичным или оставить экземплярным (конструктор тоже не нужен, все параметры в методы передаю). Хранение переменных на уровне класса тоже не нужно. Метод принял - метод возвратил. Всё. Добавлено через 57 секунд
0
|
||||
|
Администратор
|
|
| 21.12.2016, 00:33 | |
|
skilllab, если все методы в классе объявлены как static, то никакой разницы между п.2 и 3 не будет.
Добавлено через 41 секунду skilllab, прямой связи между static классом и AccesViolation нет.
0
|
|
|
|
||
| 21.12.2016, 00:40 [ТС] | ||
|
Мусорщик то ничего не собрал - всё статичное
0
|
||
|
Администратор
|
|
| 21.12.2016, 00:42 | |
|
skilllab, очевидно проблему получишь. Только static здесь ни при чем. Это вина программиста написавшего такой код.
0
|
|
|
|
||
| 21.12.2016, 00:43 [ТС] | ||
|
0
|
||
| 21.12.2016, 00:43 | |
|
Классы. Свойства. Методы.
Статические классы, методы Классы и объекты ООП и их методы Задачи по C# (классы, интерфейсы и методы) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SUNO Ai - Река Без Дна
zorxor 31.07.2026
Автор стихотворения - астрофизик Марина Катыс
Ссылка на сгенерированную музыкальную композицию:
https:/ / suno. com/ song/ 6f6e5464-b290-4650-be6c-44c85f8d8013
Я говорю, что Время- как вода
течет. . .
|
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла:
Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
|
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет
Новости компьютерного мира и их обсуждение (4)
Салют, шампанское, овации!
:drink:
|
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр.
Дословно, отклонённая. . .
|
|
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы
Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
|
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
|
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2.
Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
|
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
|