gpt4 book ai didi

.net - .NET 中的单例约定

转载 作者:行者123 更新时间:2023-12-04 02:45:54 24 4
gpt4 key购买 nike

在 .NET 中实现单例模式时是否使用属性或方法有任何约定吗?

我想不出有什么好的理由使用其中一个,除了将来可能接受参数的方法。

最佳答案

文章Choosing Between Properties and Methods对于通用场景有一些很好的建议。问题是惰性初始化有点模糊了主题。

一方面,您有这些论据表明它可能是一种属性(property)。

  • 单例只是一段数据。
  • 惰性初始化不属于可观察到的副作用。他们在这里的关键字是“可观察的”。换句话说,从调用者的角度封装了单例是刚刚创建还是已经创建。

另一方面,您有这些论据表明它可能是一种方法。

  • 需要复杂初始化的单例可能很耗时。一般来说,耗时的操作是作为方法实现的。
  • 如果单例创建可能会抛出暂时性的异常(数据库连接、网络上的文件操作等),那么一些调用者可能会更喜欢使用一种方法来代替它。

我见过单例以两种方式实现。最后,您的决定不会对您的应用程序的其余部分产生巨大影响,因此这可能是一个没有实际意义的讨论。话又说回来,如果这是您要公开的公共(public) API 的一部分,那么该决定确实具有一定的重要性。最主要的是考虑来电者对您的决定会有何 react 。例如,大多数开发人员(通常不自觉地)假设属性是无异常的,因此如果您的单例创建可能会抛出异常,那么最好使用 GetInstance() 方法。否则,拥有 Instance 属性可能是更好的途径。

要考虑的另一件事是单例是否将用于 WPF 或 Silverlight 的 XAML 绑定(bind)。通常,您将公共(public)属性绑定(bind)到 XAML 元素,因此在这种情况下,将单例实现为属性将是更好的方法,尽管方法方法有参数。

关于.net - .NET 中的单例约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18835446/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com