Рейтинг:
1
Eavan Kim
Это можно увидеть, избавившись от tcpclient в .net framework 4.0.
Там была ошибка, от которой невозможно было избавиться, и я помню, что видел, что она была принудительно удалена в каком-то пространстве имен, и я использовал ее один раз.
Поскольку это был неправильный метод, я использовал его срочно в то время и не записывал его.
Когда я пытаюсь найти его снова, поиск больше не выходит, поэтому я просто надеюсь, что кто-то знает.
OriginalGriff
Вы уверены? Справочный источник не показывает ничего необычного в TCPClient.Способ утилизации:
https://referencesource.microsoft.com/#system/net/System/Net/Sockets/TCPClient.cs
Eavan Kim
https://drive.google.com/file/d/1Zi_xmXcv0LoABFM6qYetA5T7WgrN7ViI/view?usp=sharing
эта вещь.
Вы можете увидеть CS0122.
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-messages/cs0122
OriginalGriff
Вы не можете вызвать версию с параметром bool напрямую, так как она защищена, но вы можете вызвать непараметрическую версию, которая вызывает версию bool и передает true.
Однако вызвать параметризованную версию довольно просто: выведите класс из того, который вы хотите утилизировать, и напишите общедоступный MyDispose, который вызывает защищенную версию dispose. Затем используйте его вместо исходного класса.
Eavan Kim
Важно то, что вы не можете вызвать Dispose.
Далее, вы должны знать, как кто-то может удалить объект.
Мне нужны знания.
Системные функции доступны и безопасны.
Я использовал его
Больше ничего не могу найти.
Я знаю, что это правильная функция "disposal".
Но если вы использовали Idisposable, вы знаете, что вызываете object = null.
просто мне нужны внутренние функции GC.
не ГК.
honey the codewitch
Я собираюсь надеть свою шляпу архитектуры программного обеспечения на мгновение, чтобы сказать, что если вам нужно использовать недокументированные функции для освобождения объектов, вы делаете что-то ужасно, ужасно неправильное в первую очередь. Сделайте шаг назад и проследите, как вы сюда попали, потому что вы сделали неправильный поворот. Есть так много причин не делать то, что вы пытаетесь сделать. Это большой пылающий анти-узор.
Eavan Kim
То, что я видел, не было способом удалить или принудительно перезаписать, это был способ правильно запросить его, и я не думаю, что хорошо говорить, не проверяя, что все способы, которые вы не знаете, ошибочны.
honey the codewitch
Я повторю еще раз: если вам приходится полагаться на недокументированные функции для освобождения объекта, вы делаете это неправильно.
Как правильно просить, чтобы удаляемый объект распоряжаться сам интерфейс IDisposable.Располагать().
Не соглашайтесь сколько угодно, потому что это не меняет фактов на местах. Честно говоря, фреймворк не заботится о вашем несогласии.
Eavan Kim
Я уважаю твой выбор, но это твой выбор.
Dave Kreskowiak
Позвольте мне кратко изложить то, что говорят Хани и Грифф.
В коде Dispose не было никакой ошибки вплоть до .NET 1.0, так что никто понятия не имеет, о чем вы говорите.
То, что вы делали тогда, что бы это ни было, кажется чем-то, что делали только вы, и у вас нет причин делать это сегодня.
Eavan Kim
Я не говорю, что нет никаких других побочных эффектов.
Один способ-это не единственный способ решить все проблемы.
И не потому, что я этого не знаю.
Теперь я просто хочу еще раз вспомнить интересные факты, которые я обнаружил в недоразумениях забытого прошлого.
просто, что все.
пожалуйста, перестаньте говорить "используйте GC"
Мне нужны некоторые забавные факты, обнаруженные людьми, которые в прошлом не верили в GC.
Dave Kreskowiak
Ни я, ни кто-либо другой не сказал "используйте GC". Он полностью автоматический и самонастраивается.
Грифф спросил, не об этом ли ты говоришь.Собирать, что никто в здравом уме не предложил бы сделать.
Я говорю, что никто не знает, о какой проблеме ты говоришь!
Eavan Kim
Извините за недоразумение.
В следующий раз я прочитаю его в более подлинном состоянии.
Рейтинг:
0
Sander Rossel
Кажется, я понимаю, что ты имеешь в виду...
Я столкнулся с некоторыми классами с частным/защищенным методом Dispose, но это действительно реализовало IDisposable, как и упомянутый вами TcpClient.
В этих случаях у вас есть два варианта: приведение к IDisposable и вызов Dispose или, часто предполагаемый метод, вызов альтернативного метода, обычно Close, вместо этого.
Это, вероятно, по замыслу, а не ошибка.
Вероятно, потому, что "закрыть" связь имеет больше смысла, чем избавиться от нее.
Я вижу, что поскольку объект TcpClient идет, распорядиться работает .4.7.2 чистый, но не 4 и 4,5 (и, наверное, все старые версии).
Другой метод правильного размещения этих объектов-это упаковка их в блок using, который все еще работает.
var client = new TcpClient();
client.Dispose(); // Error in .NET 4.5 and ealier
client.Close(); // This works and calls Dispose() internally
using (var client2 = new TcpClient())
{
// Use client2 here, it is automatically disposed when it goes out of scope.
// Works even in .NET 4.5 and earlier.
}