[英]properties and references in Visual Studio, C#
我是C#的新手,正在看一本書中的示例。 該示例基於創建卡類,卡片組和另一個運行這兩個類的CardClient項目。
我在編譯時遇到錯誤。 第一個錯誤是:
可訪問性不一致:屬性類型'ConsoleApplication1.Card.Suit'的訪問權限比屬性'ConsoleApplication1.Card.suit'少
下一個錯誤:
找不到類型或名稱空間名稱“ Deck”(您是否缺少using指令或程序集引用?)
兩者的代碼如下:
namespace ConsoleApplication1
{
class Card
{
public Suit suit
{
get
{
return suit;
}
}
public Rank rank { get; }
enum Suit
{
HEART,
SPADE,
CLUB,
DIAMOND
}
enum Rank
{
ACE,
TWO,
THREE,
FOUR,
FIVE,
SIX,
SEVEN,
EIGHT,
NINE,
TEN,
JACK,
QUEEN,
KING
}
private Card()
{
}
public Card(Suit suit, Rank rank)
{
this.suit = suit;
this.rank = rank;
}
public override string ToString()
{
return suit + " of " + rank;
}
}
class Deck
{
private Card[] cards;
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 cards[(Suit)suitVal, (Rank)rankVal];
}
}
}
public Card GetCard(int cardLocation)
{
if (cardLocation >= 0 && cardLocation <= 51)
return cards[cardLocation];
else {
throw (new System.ArgumentOutOfRangeException("cardLocation", cardLocation, "cardLocation must be between 0 and 51."));
}
}
public void Shuffle()
{
Card[] tempDeck = new Card[52];
bool[] assigned = new bool[52];
Random sourceGen = new Random();
for (int i = 0; i < 52; i++)
{
int destCard = 0;
bool foundCard = false;
while (foundCard == false)
{
destCard = sourceGen.Next(52);
if (assigned[destCard] == false)
foundCard = true;
}
assigned[destCard] = true;
tempDeck[destCard] = cards[i];
}
tempDeck.CopyTo(cards, 0);
}
}
}
CardClient的代碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ConsoleApplication1;
namespace CardClient
{
class CardClient
{
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();
}
Console.ReadKey();
}
}
}
您有一個公共變量suit
但是該變量的枚舉類型是私有的,因此基本上您聲明該變量是公共可訪問的,但類型不是,這沒有任何意義。
您必須將枚舉Suit
聲明為公開才能解決此問題。
另外,您還必須將Deck
和Card
類聲明為public,以便另一個名稱空間中的CardClient
可以訪問它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.