C#编成问题

来源:百度知道 编辑:UC知道 时间:2024/06/24 07:48:29
public Card(Suit newSuit, Rank newRank)
{
suit=newSuit;
rank=newRank;
}
..............................
public override int GetHashCode()
{
return 13*(int)rank + (int)suit;
这是一副扑克牌.suit是花式,rank是A到K.13张牌.
这句返回的是什么意思?return 13*(int)rank + (int)suit
最好详细些,谢谢!

同意无痕的

这是Card类的构造函数,根据牌面rank和花色suit构造一张牌
public override int GetHashCode() 这是重写基类的哈希函数
重写它有两个可能原因,一个是为了快速排序用,如果是同一张牌,如果是用基类的GetHashCode() 方法,得到的哈希函数是不保证一样的,这样不利于排序,所以就重写了基类的GetHashCode() 函数,自己定义一个返回哈希值,保证相同的牌拥有相同的哈希值,而不同的牌拥有不同的哈希值(利于排序)

第二个可能原因就是如果你要重写"=="运算符或者重写Equals函数,就是你要定义两个Card相等,那么你就必须重写GetHashCode() 函数,来保证两张相同的牌具有相同的哈希函数

而这个13*(int)rank + (int)suit就是你选择的一个计算式,你可以随便定义,只要保证相同的牌(就是rank相同,suit相同)值相等,不相同的牌值不等就可以了,

public override int GetHashCode()
这是构造哈希函数

哈希函数每个返回值必须唯一

13*(int)rank + (int)suit
就是52个唯一序列

这句返回的是什么意思?return 13*(int)rank + (int)suit

13 乘以 rank 然后加上 suit