Visual Studio中的属性和引用,C#

Visual Studio中的属性和引用,C#,c#,C#,我是C#的新手,在书中讲述了一个例子。该示例基于创建一个card类、deck类和另一个运行这两个类的CardClient项目 我在编译时出错。第一个错误是: 可访问性不一致:属性类型“ConsoleApplication1.Card.Suit”的可访问性低于属性“ConsoleApplication1.Card.Suit” 不知道我为什么会犯那个错误,或者那个错误告诉了我什么。它似乎在告诉我,财产诉讼比同一财产诉讼更难获得。所以我不确定那里发生了什么 下一个错误: 找不到类型或命名空间名称“De

我是C#的新手,在书中讲述了一个例子。该示例基于创建一个card类、deck类和另一个运行这两个类的CardClient项目

我在编译时出错。第一个错误是:

可访问性不一致:属性类型“ConsoleApplication1.Card.Suit”的可访问性低于属性“ConsoleApplication1.Card.Suit”

  • 不知道我为什么会犯那个错误,或者那个错误告诉了我什么。它似乎在告诉我,财产诉讼比同一财产诉讼更难获得。所以我不确定那里发生了什么
  • 下一个错误:

    找不到类型或命名空间名称“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);
            }
        }
    }
    
    命名空间控制台应用程序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
    ,但该变量的枚举类型是私有的,因此基本上您将该变量声明为可公共访问的,但该类型不是,这没有意义

    要解决此问题,必须将enum
    Suit
    声明为公共的

    您还必须将类
    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();
            }
        }
    }