问题描述
PlayingCardcard=this.cardPack[(int)suit,(int)value];this.cardPack[(int)suit,(int)value]=null;returncard;以上程序为方法中一部分,目的是返回一张扑克牌,同时设置null,card获得拉this.cardPack[(int)suit,(int)value]的地址,this.cardPack[(int)suit,(int)value]设置为null,那么返回的card也应该是null,返回card达不到效果呀。望高手解答,困惑中。
解决方案
解决方案二:
是教材入门到精通中的一个例子。
解决方案三:
你这什么逻辑,谁告诉你引用类型设置为null后,原来的也变成null的?设置null就是重新设置其引用地址vara=newobject();varb=a;a=null;//b!=null
解决方案四:
namespaceCards{usingSystem;usingSystem.Collections;classPack{publicconstintNumSuits=4;//扑克牌中的四种花色publicconstintCardsPerSuit=13;//扑克牌的13种面值privatePlayingCard[,]cardPack;//存储扑克牌对象的数组privateRandomrandomCardSelector=newRandom();//用来生成随机数,目的是随机发牌//构造方法用来初始化扑克牌数组。publicPack(){//生成扑克牌数组的实例cardPack=newPlayingCard[NumSuits,CardsPerSuit];//将扑克牌数组中的每个元素都实例化成一个扑克牌的对象for(Suitsuit=Suit.Clubs;suit<=Suit.Spades;suit++){for(Valuevalue=Value.Two;value<=Value.Ace;value++){this.cardPack[(int)suit,(int)value]=newPlayingCard(suit,value);}}}//发牌程序publicPlayingCardDealCardFromPack(){//随机生成一种花色Suitsuit=(Suit)randomCardSelector.Next(NumSuits);//判断该随机花色是否全部发完牌。while(this.IsSuitEmpty(suit)){//重新随机生成一个花色suit=(Suit)randomCardSelector.Next(NumSuits);}//随机产生一个牌面值Valuevalue=(Value)randomCardSelector.Next(CardsPerSuit);//随机产生一张扑克牌,这张牌在数组里面的值不为空的while(this.IsCardAlreadyDealt(suit,value)){value=(Value)randomCardSelector.Next(CardsPerSuit);}PlayingCardcard=this.cardPack[(int)suit,(int)value];this.cardPack[(int)suit,(int)value]=null;returncard;}privateboolIsSuitEmpty(Suitsuit){boolresult=true;//判断具有suit花色的每张牌(2~A),如果有一张牌不是null的result值为false,否则为truefor(Valuevalue=Value.Two;value<=Value.Ace;value++){if(!IsCardAlreadyDealt(suit,value)){result=false;break;}}returnresult;}//如果这个数组中的元素值为null则代表该牌已经发出privateboolIsCardAlreadyDealt(Suitsuit,Valuevalue){return(this.cardPack[(int)suit,(int)value]==null);}}}
解决方案五:
引用2楼娃都会打酱油了的回复:
你这什么逻辑,谁告诉你引用类型设置为null后,原来的也变成null的?设置null就是重新设置其引用地址vara=newobject();varb=a;a=null;//b!=null
b!=null,晕,应该等于呀,a,b是同样的引用呀,大神我想不通呀。
解决方案六:
是不是null本身就是引用呀,记得教材里说过这么一句话。
解决方案七:
你把object想象成一桩房子,a和b是房子的门牌号,现在我把a拿走了,关b什么事
解决方案八:
大神,在没有赋值null之前门牌号是不是一样呀
解决方案九:
两个引用指向同一个对象的地址,你把其中一个引用指向的地址变了,会影响另一个引用吗?
解决方案十:
引用8楼johnliuyuan的回复:
两个引用指向同一个对象的地址,你把其中一个引用指向的地址变了,会影响另一个引用吗?
是会的