Visual Studio、c#中的属性和引用
本文关键字:属性 引用 Studio Visual | 更新日期: 2023-09-27 18:06:47
我是c#新手,正在阅读一本书中的示例。该示例基于创建一个card类、deck类和另一个运行这两个类的CardClient项目。
我在编译时得到错误。第一个错误是:
可访问性不一致:属性类型为"ConsoleApplication1.Card"。Suit比属性ConsoleApplication1.Card更难访问。西装'
- 不确定为什么我得到这个错误或这个错误告诉我什么。它似乎在告诉我,财产诉讼比同样的财产诉讼更难获得。所以不知道发生了什么。
第二个错误:
类型或命名空间名称'Deck'找不到(您是否缺少using指令或程序集引用?)
- 我包含了一个对ConsoleApplication1的新引用,并且我声明我正在使用该名称空间,但是由于某种原因CardClient没有看到它。
两者的代码如下:
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
,但该变量的枚举类型是private,所以基本上你声明该变量是公共可访问的,但类型不是,这是没有意义的。
你必须声明enum Suit
为public来解决这个问题。
您还必须将Deck
和Card
类声明为公共,以便其他命名空间中的CardClient
可以访问它们。