为什么GetHashCode的不是像在.NET的HashCode的属性?

有帮助吗?

解决方案

我不认为有任何好的理由。 GetHashCode的任何FPGA实现,应迅速到足够多的投入的属性。这就是说,有很多设计缺陷的.NET Framework中,有大有小,有的严重。这似乎是一个小的一个。

其他提示

大概是因为它需要计算,并揭露它作为属性格式可能意味着哈希码已经是免费提供的。

编辑: 属性与方法 <:本指南/ p>

“的操作是要沟通,他们应该考虑缓存结果用户够贵的。”

也许的GetHashCode是昂贵的足够的情况。

通常,它是不可能定义的散列码的一类,因为这使得:

  

e.g。该类的对象不   具有良好定义的概念   身份。

因此,这是常见的使的GetHashCode()方法抛出一个NotImplementedException。这当然所有种类的问题,如果是的hashCode的属性,因为大多数人(和调试器),假设它总是有效得到一个属性的值

除此之外的属性不是别的,只是吸气剂和一个设置器方法,从设计的角度来看的性质不应该包含比初始化或验证,其他任何运算例如:

private object _obj;
public object Obj
{
  get
  {
    if(_obj == null)
    {
      _obj = new object();
    }
    return _obj;
  }
  set
  {
    if(value == badvalue)
    {
      throw new ArgumentException("value");
    }
    _obj = value;
  }
}

GetHashCode()方法中不包含大量的计算,但它可以包含例如长时间运行的操作(只是从这样的事实,它可以计算一个对象的哈希码以复杂的方式),这就是为什么它的一个方法,而不是一个属性。

属性应仅用于如果其背后的计算是非常快或缓存

除了大部分时间在属性的唯一逻辑应该验证

您必须记住,.NET框架的设计是由各种各样的语言来访问。

在理论上你可以创建一个编译器是不能正确地覆盖性能。虽然这将使一个非常糟糕的编译器,它不一定是非法的。 (记住性质只是一些元数据的方法)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top