Visual Studio中的属性和引用,C#
我是C#的新手,在书中讲述了一个例子。该示例基于创建一个card类、deck类和另一个运行这两个类的CardClient项目 我在编译时出错。第一个错误是: 可访问性不一致:属性类型“ConsoleApplication1.Card.Suit”的可访问性低于属性“ConsoleApplication1.Card.Suit”Visual Studio中的属性和引用,C#,c#,C#,我是C#的新手,在书中讲述了一个例子。该示例基于创建一个card类、deck类和另一个运行这两个类的CardClient项目 我在编译时出错。第一个错误是: 可访问性不一致:属性类型“ConsoleApplication1.Card.Suit”的可访问性低于属性“ConsoleApplication1.Card.Suit” 不知道我为什么会犯那个错误,或者那个错误告诉了我什么。它似乎在告诉我,财产诉讼比同一财产诉讼更难获得。所以我不确定那里发生了什么 下一个错误: 找不到类型或命名空间名称“De
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);
}
}
}
命名空间控制台应用程序1
{
班级卡
{
公益诉讼
{
得到
{
反诉;
}
}
公共等级{get;}
枚举诉讼
{
心,
黑桃,
俱乐部,
钻石
}
枚举秩
{
王牌
二,,
三,,
四,,
五,,
六,,
七,,
八,,
九,,
十,,
杰克,
女王,
国王
}
私人卡()
{
}
公共卡(西服、军衔)
{
这套衣服;
这个.等级=等级;
}
公共重写字符串ToString()
{
返回服+等级的“+”;
}
}
甲板
{
私人卡[]卡;
公共甲板()
{
卡片=新卡片[52];
对于(int-suiteval=0;suiteval<4;suiteval++)
{
对于(int rankVal=1;rankVal<14;rankVal++)
{
卡片[Suiteval*13+rankVal-1]=新卡片[(套装)Suiteval,(等级)rankVal];
}
}
}
公共卡GetCard(内部卡位置)
{
如果(cardLocation>=0&&cardLocation您有一个公共变量suit
,但该变量的枚举类型是私有的,因此基本上您将该变量声明为可公共访问的,但该类型不是,这没有意义
要解决此问题,必须将enumSuit
声明为公共的
您还必须将类Deck
和Card
声明为public,以便CardClient
在另一个名称空间中可以访问它。没有“C Sharp”这样的东西。该语言的名称是“C#”。x0r的答案涵盖了这一点,但由于我工作中的标准烦人,我只想补充一点,始终显式指定访问修饰符(“public”、“private”、“protected”、“internal”)是一个好主意约翰,让我们不要让C++的开发者得到和C++开发者一样的古怪名声。对不起,应该说“BTW,没有这样的东西……”而且,我已经有了古怪的名声,所以只怪我。说:“C·VeVs都是好人,除了Sundes字符之外。”.威尔,如果他真的不知道怎么办?我怀疑在某些语言中,“#”是按语音翻译的。
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();
}
}
}