Visual Studio、c#中的属性和引用

本文关键字:属性 引用 Studio Visual | 更新日期: 2023-09-27 18:06:47

我是c#新手,正在阅读一本书中的示例。该示例基于创建一个card类、deck类和另一个运行这两个类的CardClient项目。

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

可访问性不一致:属性类型为"ConsoleApplication1.Card"。Suit比属性ConsoleApplication1.Card更难访问。西装'

  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();
        }
    }
}

Visual Studio、c#中的属性和引用

你有一个公共变量suit,但该变量的枚举类型是private,所以基本上你声明该变量是公共可访问的,但类型不是,这是没有意义的。

你必须声明enum Suit为public来解决这个问题。

您还必须将DeckCard类声明为公共,以便其他命名空间中的CardClient 可以访问它们。