标题:《C#入门经典》不懂
只看楼主
淹不死的鱼
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-8-11
结帖率:100%
已结贴  问题点数:6 回复次数:2 
《C#入门经典》不懂
最近在看《C#入门经典》第四版,214页有一段话感觉很纠结,是一个关于扑克牌程序的,部分代码如下:
public void Shuffle()
        {
            Card[] newDeck = new Card[52];
            bool[] assigned = new bool[52];
            Random sourceGen = new Random();

            for (int i = 0; i < 52; i++)
            {
                int deskCard = 0;
                bool foundCard = false;
                while (foundCard == false)
                {
                    deskCard = sourceGen.Next(52);
                    if (assigned[deskCard] == false)
                        foundCard = true;
                }
                assigned[deskCard] = true;
                newDeck[deskCard] = cards[i];
            }
            newDeck.CopyTo(cards, 0);
        }
这个方法的最后一行使用了System.Array类的CopyTo()方法,把newDeck中的每张扑克牌复制到cards中,也就是说使用同一个cards对象中的同一组Card对象,而不是创建新的实例.如果使用cards = newDeck,就会用另一个对象代替cards引用的对象实例。如果其他地方的代码仍保留对原caeds实例的引用,就会出现问题——不会洗牌。
上面都是原文,什么“使用同一个cards对象中的同一组Card对象”,什么“用另一个对象代替cards引用的对象实例……不会洗牌”,一头雾水。本人初学C#,望看过《C#入门经典》朋友解释一下。
搜索更多相关主题的帖子: 经典 扑克牌 public Random false 
2011-08-11 21:11
zhoufeng1988
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:北京
等 级:贵宾
威 望:27
帖 子:1432
专家分:6329
注 册:2009-5-31
得分:6 
CopyTo方法采用引用参数传递。
“使用同一个cards对象中的同一组Card对象”:这个意思是把newDeck数组中的元素统统复制到cards数组中,所以是同一组Card对象。
“用另一个对象代替cards引用的对象实例……不会洗牌”:这个意思是如果用了cards = newDeck,是实际上就是一个引用拷贝,也就是cards会重新引用到newDeck,而不会对cards原先所引用的数组进行修改。
2011-08-12 11:15
淹不死的鱼
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-8-11
得分:0 
回复 2楼 zhoufeng1988
有点小懂了
2011-08-12 22:06



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-347359-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.054192 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved