gpt4 book ai didi

c# - 我在哪里可以找到一些在类里面使用的静态属性与实例 "fieldless"属性的明确示例?

转载 作者:太空宇宙 更新时间:2023-11-03 18:49:08 26 4
gpt4 key购买 nike

在除少数情况外的所有情况下,属性都由字段支持,无论是显式还是隐式。但是,DateTime.Today 等属性是计算属性,不由字段支持(编辑:Guid.EmptyMath.E 等属性是由静态字段支持,我对这些不感兴趣)。

就最佳实践或经验而言,此类无字段属性应该是静态的还是非静态的?

我知道意见各不相同,所以我想从众所周知的库、书籍或您自己的经验中找到示例。最终,我希望“从实地”找到清晰的示例以用于类。

编辑:我理解语义与实现的讨论,我正在寻找的是真实世界的例子来解释每个案例的这个概念(静态或非静态)清晰简洁。

最佳答案

属性是静态的还是实例的取决于它的目的和意义。

DateTime.Today 是静态的原因是因为它实际上返回了 DateTime 的实例 - 首先必须创建一个 DateTime 会很尴尬 然后调用实例方法(或实例属性)以获取当前日期。

如果出现以下情况,您应该考虑将属性设为静态:

  • 它不代表特定对象实例的状态。
  • 它不会被写入——或者如果写入被设计成线程安全的。 (当然,您必须定义线程安全的含义)。
  • 它是一个工厂属性,用于返回对象的实例(想到单例访问器属性)。
  • 您不希望需要具有相同名称的实例属性(C# 不允许重复的命名属性,这些属性的区别仅在于它们是实例还是静态)。

否则,该属性可能需要是一个实例属性 - 或者可能是一个方法。

.NET 本身中一些有趣的静态属性示例包括:

  • 单例访问器属性。
  • WPF 中的 DependencyProperty 定义
  • 全局可访问的只读状态,例如用于格式化字符串的 Culture 实例。

编辑: 在考虑在 .NET 中使用实例属性和静态属性的地方时,Thread 类作为一个类的例子出现在脑海中,该类在选择何时使用时令人困惑哪个。

例如,CurrentPrincipal 属性是一个静态属性,而 CurrentCulture 属性是一个实例属性。目前尚不清楚该组织是否有任何好处 - 似乎(对我而言)Thread 的所有静态属性都可以成为实例属性(CurrentThread 除外)而无需失去任何表达能力,但增加了公共(public)界面的一致性和清晰度。

关于c# - 我在哪里可以找到一些在类里面使用的静态属性与实例 "fieldless"属性的明确示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1681480/

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