总共两个类,一个控制台程序入口Card类:public class Card
{
public readonly Suit suit;
public readonly Rank rank;
public override string ToString()
{
return "The " + rank + " of " + suit + "s";
}
private Card()
{
}
public Card(Suit newSuit, Rank newRank)
{
suit = newSuit;
rank = newRank;
}
}Deck类public class Deck
{
public Deck()
{
cards = new Card[52];
for (int suitVal = 0; suitVal < 4; suitVal++)
{
for (int rankVal = 1; rankVal < 14; rankVal++)
{
cards[suitVal * 13 + rankVal -1] = new Card((Suit)suitVal,(Rank)rankVal);
}
}
} private Card[] cards; public Card GetCard(int cardNum)
{
if (cardNum >= 0 && cardNum <= 51)
return cards[cardNum];
}
}
控制台程序入口:static void Main(string[] args)
{
Deck myDeck = new Deck();
myDeck.Shuffle();
for (int i = 0; i < 52; i++)
{
Card tempCard = myDeck.GetCard(i);
Console.Write(tempCard.ToString());
if (i != 51)
Console.Write(", ");
else
Console.WriteLine();
}
}
我有两个问题:
一,我不明白其中Deck类的字段为什么可以这样定义private card[] cards?
二,为什么可以直接周用Card类中的重写的ToString方法?
{
public readonly Suit suit;
public readonly Rank rank;
public override string ToString()
{
return "The " + rank + " of " + suit + "s";
}
private Card()
{
}
public Card(Suit newSuit, Rank newRank)
{
suit = newSuit;
rank = newRank;
}
}Deck类public class Deck
{
public Deck()
{
cards = new Card[52];
for (int suitVal = 0; suitVal < 4; suitVal++)
{
for (int rankVal = 1; rankVal < 14; rankVal++)
{
cards[suitVal * 13 + rankVal -1] = new Card((Suit)suitVal,(Rank)rankVal);
}
}
} private Card[] cards; public Card GetCard(int cardNum)
{
if (cardNum >= 0 && cardNum <= 51)
return cards[cardNum];
}
}
控制台程序入口:static void Main(string[] args)
{
Deck myDeck = new Deck();
myDeck.Shuffle();
for (int i = 0; i < 52; i++)
{
Card tempCard = myDeck.GetCard(i);
Console.Write(tempCard.ToString());
if (i != 51)
Console.Write(", ");
else
Console.WriteLine();
}
}
我有两个问题:
一,我不明白其中Deck类的字段为什么可以这样定义private card[] cards?
二,为什么可以直接周用Card类中的重写的ToString方法?
二、因为关键字 override 重写了基类的ToString方法,所以调用的时候,就是调用Card类的ToString了
----------------
Sorry,笔误
一,一个Deck类的实例,包含多个Card实例完全可以这样写Card[] cards = new Card[52]; 跟那个字段有什么关系了?二,它并没有实例化Card类为什么可以调用Card类中的ToString()方法?
cards = new Card[52];
不就是Card[] cards = new Card[52]吗?只是这样声明 作用域在整个类里面。Card tempCard = myDeck.GetCard(i);
GetCard(i)返回了一个Card对象。
你看到的 private Card [] cards,就是声明一个私有数组。但是并没有初始化,正真初始化的地方,是在Deck类的构造函数:public Deck(),里面第一行cards = new Card[52];
二,它并没有实例化Card类为什么可以调用Card类中的ToString()方法
------------------------------------------------------------
其实有实例化,就在Deck类的构造函数里面:cards = new Card[52];
2.
Card tempCard = myDeck.GetCard(i);
Console.Write(tempCard.ToString()); //不是在这调用的吗?tempCard是Card的对象,所以能调用