Можно всегда использовать команду "mysqladmin завершение работы"
Вопрос не в победе . Я изо всех сил пытаюсь понять ваши вопросы, но вы, кажется, озабочены защитой от полностью воображаемых атак.
Оставляя это в стороне и рассматривая ваши вопросы по одному:
Мой вопрос в том, что означает «деструкторы не унаследованы "на самом деле означают, хотя вы не можете позвонить деструктор явно, деструкторы в цепочка наследования называется автоматически и базовый класс деструкторы вызываются, даже если производный класс не определяет деструктор?
Это на самом деле означает, что деструкторы базового класса не являются членами производного класса .
Мой встречный вопрос: «Почему вы считаете, что факты что (1) вы не можете вызвать деструктор напрямую, (2) деструкторы в цепочке наследования вызываются автоматически при сборе и (3) вызываются деструкторы базового класса, даже если производный класс не определяет конструктор, иметь какие-либо касающийся вопроса о том, является ли деструктор базового класса членом производного класса?
Имеет ли это отношение к некоторой тонкой семантике? различие, что завершение реализован сборщиком мусора а не язык / компилятор C #?
Нет.
Язык C # - это спецификация; он ничего не реализует. Компилятор C # реализует спецификацию; он определенно не «реализует доработку». CLR - это то, что реализует финализацию.
Независимо от этого, тот факт, что деструкторы в базовом классе не являются членами производного класса, не имеет никакого отношения к тому, как финализация реализуется сборщиком мусора CLR.
В конце мы вернемся к вопросу о семантике завершения CLR и почему они не имеют отношения к вопросу о наследовании.
Хотя в спецификации языка C # также указано что "конструкторы экземпляров не унаследовано ", поведение в отношении конструкторам значительно отличается от десктрукторов и подходит лучше IMO с "не наследуется" терминология
Хорошо, я согласен, что вы в это верите. Почему вы считаете, что такое поведение имеет отношение к вопросу о наследовании? Я ни в малейшей степени не понимаю, почему вы так считаете. К наследованию относится то, является ли рассматриваемая сущность членом производного типа просто в силу того, что она является членом базового типа.
Я согласен с тем, что тот факт, что конструктор базового типа не может быть вызван напрямую через конструкцию производного типа, в котором отсутствует этот конструктор, согласуется с тем фактом, что конструкторы не наследуются. Я просто не понимаю, какое отношение это имеет к вопросу о наследовании деструкторов.
Более уместным фактом является то, что базовый класс с общедоступным конструктором без параметров ДЕЙСТВИТЕЛЬНО имеет этот конструктор, вызываемый, когда производный класс, в котором отсутствует общедоступный конструктор без параметров, создается с его конструктором по умолчанию. Производный класс не наследует открытый конструктор без параметров базового класса, но тем не менее вызывается. Если вы согласны с тем, что конструктор, не унаследованный, может быть вызван таким образом, то почему бы не согласиться с тем, что деструктор также вызывается с аналогичной семантикой?
Я просто хочу сказать, что у меня есть встретил много людей, которые не понять или понять, что это то, что случается, и значительная часть причина этого - "деструкторы не унаследованы ».
Я полностью согласен. Вероятно, не следует писать деструкторы, если у вас нет четкого понимания того, что именно является правильной семантикой. Я встревожен количеством книг для начинающих на C #, которые рассматривают деструкторы как подходящая тема для новичков; написание правильного деструктора - одна из самых сложных базовых задач в C #.
Поскольку внутренняя часть реализация, по сути, основана на наследование, как указано выше, я думаю мой вопрос действителен
Ваш вопрос верен независимо от того. Но теперь вы объединяете детали реализации функции со спецификацией этой функции.
По аналогии рассмотрим анонимные типы. Разумеется, имен у них нет. Но метаданные, которые мы выплевываем, конечно же, называют тип; CLR требует, чтобы типы имели имена. Это противоречие? На самом деле, нет. Концептуальная сущность, называемая в спецификации «анонимным типом», не имеет имени, и вот что важно. Разработчик, конечно, может свободно использовать платформу, которая не требует именования всех типов.
Точно так же наша реализация C # реализует деструкторы, вставляя IL в метод, который отменяет виртуальный метод с именем Finalize. Язык C # был тщательно разработан, чтобы не зависеть от этой функции среды выполнения. Другая реализация C # совершенно свободна для выбора другого механизма реализации деструкторов. (Возможно, нам стоит изменить спецификацию, чтобы прояснить, что информация о том, как реализованы деструкторы, является информативной деталью реализации, а не требованием языка C #.)
Но независимо от выбора. Что касается деталей реализации, деструкторы в базовом классе не являются членами производного класса. Точно так же, независимо от деталей реализации, анонимные типы не имеют имен.
Теперь все ясно или у вас есть еще вопросы?
(Возможно, нам стоит изменить спецификацию, чтобы прояснить, что информация о том, как реализованы деструкторы, является информативной деталью реализации, а не требованием языка C #.)Но независимо от выбора. Что касается деталей реализации, деструкторы в базовом классе не являются членами производного класса. Точно так же, независимо от деталей реализации, анонимные типы не имеют имен.
Теперь все ясно или у вас есть еще вопросы?
(Возможно, нам стоит изменить спецификацию, чтобы прояснить, что информация о том, как реализованы деструкторы, является информативной деталью реализации, а не требованием языка C #.)Но независимо от выбора. Что касается деталей реализации, деструкторы в базовом классе не являются членами производного класса. Точно так же, независимо от деталей реализации, анонимные типы не имеют имен.
Теперь все ясно или у вас есть еще вопросы?