簡體   English   中英

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

[英]properties and references in Visual Studio, C#

我是C#的新手,正在看一本書中的示例。 該示例基於創建卡類,卡片組和另一個運行這兩個類的CardClient項目。

我在編譯時遇到錯誤。 第一個錯誤是:

可訪問性不一致:屬性類型'ConsoleApplication1.Card.Suit'的訪問權限比屬性'ConsoleApplication1.Card.suit'少

  1. 不知道為什么會收到該錯誤或該錯誤告訴我什么。 似乎是在告訴我,與同一個財產訴訟相比,該財產訴訟的可及性較差。 所以不知道那里發生了什么。

下一個錯誤:

找不到類型或名稱空間名稱“ Deck”(您是否缺少using指令或程序集引用?)

  1. 我包括對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但是該變量的枚舉類型是私有的,因此基本上您聲明該變量是公共可訪問的,但類型不是,這沒有任何意義。

您必須將枚舉Suit聲明為公開才能解決此問題。

另外,您還必須將DeckCard類聲明為public,以便另一個名稱空間中的CardClient可以訪問它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM