- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道 C# 中析构函数和终结函数在含义和使用上的区别。
但是,通常“我应该...”的答案是“不要使用析构函数,而是使用 MSDN 中所示的处置模式”。埃里克·利珀特 writes相当strongly反对不必要地使用析构函数。
但是,该“模式”提倡编写这样的析构函数 ~T() { Dispose(false); }
。陈述的原因是它是一个“回退”,在程序员忘记调用 Dispose()
时调用。当然,这忽略了一个事实,即终结器在其操作中是不确定的,甚至可能永远不会运行。
因此:
如果我使用处置模式,是否还应该提供析构函数?顺便说一下,我只处理托管资源(例如 Entity Framework DataContext
)。
如果我确实提供了一个析构函数:如果我的类派生自 IDisposable
,它可能已经提供了一个析构函数,那么我是否也应该提供一个?我认为在这种情况下永远不会编写析构函数,但是文档说无论如何它都会自动调用基类的析构函数。
最佳答案
我不会真的回答你的两个问题,但我会提供一个意见:
The stated reason is that it is a "fallback" which is called in case the programmer forgets to call
Dispose()
.
如果方法的调用者传递一个要求,比方说,一个非空字符串,那么如果它们传递 null,您完全有权抛出异常,对吗?来电者违约;那是异常行为,因此您抛出异常。你不认为,哦,调用者“忘记”传递一个有效的参数,我想我会接受错误的输入并继续前进。这样做实际上是将方法的约定从“null 是 Not Acceptable 并且会产生异常”更改为“null 是可接受的并且被视为空字符串”,例如。
如果用户在完成时调用 Dispose 是一个要求,而他们没有调用,那么这与调用方在调用方法时未能履行约定没有什么不同。调用者未能满足要求,因此使他们的程序崩溃。如果析构函数遇到未处置的对象,则让析构函数抛出信息性异常。正如调用者很快就会知道将错误的参数传递给方法会造成伤害一样,他们也会了解到未能处置您的对象也会造成伤害。
要么显式处理对象是必要的,要么不是。如果有必要,请确保用户这样做。否则就是隐藏他们的错误。
关于C# 析构函数 : the dispose "pattern" and best practises,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8127937/
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗?Update the question,所以它是 Stack Overflow 的 on-topic。 已关闭10 年前
人们在使用 nServiceBus/msmq 时如何处理安全问题?考虑例如消息加密、消息签名(验证?)等 你怎么知道消息不是从其他人发送到队列的。或者有人篡改了消息。 最佳答案 您可以控制 MSMQ
我想使用 ruby 发出一个简单的 post 请求。起初我用 gem open-uri 试了一下。但是这个answer对一个问题说它不起作用。因此,我不想使用帖子中推荐的 rest-open-ur
我知道 C# 中析构函数和终结函数在含义和使用上的区别。 但是,通常“我应该...”的答案是“不要使用析构函数,而是使用 MSDN 中所示的处置模式”。埃里克·利珀特 writes相当strongly
我有一个外部 api,一个用于下载,另一个用于从数据库表 [postgresql] 上传数据。 table 很大。随着时间的推移,我们观察到服务器缓慢地继续占用内存但不会删除太多内存,它会抛出错误并退
这个问题在这里已经有了答案: How to make an element width: 100% minus padding? (15 个答案) 关闭 4 年前。
在我正在开发的包中,我需要定义一个新单位:相当于 100 英尺的飞行高度 (FL)。 units包提供了以下可能性: units::install_conversion_constant("FL",
我正在使用 Azure API 管理来记录和测试不同环境(例如开发、测试和生产)中的多个 Web 服务和端点。目前,我通过不同的 API 来分隔不同的环境。然后我对它们进行标记,以便更好地了解 API
我正在使用 Azure API 管理来记录和测试不同环境(例如开发、测试和生产)中的多个 Web 服务和端点。目前,我通过不同的 API 来分隔不同的环境。然后我对它们进行标记,以便更好地了解 API
我只想监视或处理与发送一些数据并正在监听操作的“事物”的交互。 例如,将服务器读取或生成的脉冲发送到所有连接和监听的客户端。 该数据不应存储在 Mongo 集合中,而只能作为 volatile 数据集
我正在开发一个基于扩展 API 的 chrome 扩展,我需要针对我自己的在线服务进行身份验证。我阅读了很多文档,我知道我需要使用 OAuth2 并且我可能应该使用 chrome.identity.l
假设一个应用程序读取数据文件,从用户获取一些输入(通过 GUI),从大型数据库获取附加数据并执行冗长的分析。 按照建议,我将耗时的部分(数据库管理和实际分析)删除到了 SwingWorker 实例中。
在附件中您可以找到一个客户端代码示例:处理 jQuery 简单 slider ,该 slider 可以通过手动拖动或通过消息流从服务器获取新值来更改其值。 在 Template.SLIDER.rend
几天来,我一直在努力为我的用例找到一个好的模式。我有一个非常复杂的响应式(Reactive)表单,充满了嵌套组件,一些字段是必需的,某些字段可能会在特定条件下出现,等等……这给维护代码带来了巨大的问题
摘自书中: 2.1.1。示例:无状态 Servlet在第一章中,我们列出了许多创建线程并从这些线程调用组件的框架,让您有责任使组件成为线程安全的。很多时候,线程安全要求不是源于直接使用线程的决定,而是
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 6 年前。 Improv
I have hibernate @OneToMany mapping I am getting the mentioned error. Does not understand the reason
因此,我正在开发一个非常小的 Web 组件,以作为更大的设计系统的一部分。 我对网络组件的使用有点陌生,但我知道这个特定的网络组件可以在一个布局中使用很多很多次。 此 Web 组件控制在传递给它的任何
我是一名优秀的程序员,十分优秀!