Несовместимая доступность для типов полей в C # - PullRequest
0 голосов
/ 24 ноября 2011

Я пытаюсь создать несколько простых классов для своей программы, и меня озадачивает непоследовательная ошибка доступа к типам полей для моего объекта Tile [,] class 'theGrid'. Я посмотрел на некоторые другие решения и выставил все на всеобщее обозрение, как я вижу, но я все еще застрял в том, что делать с этим.

Не могли бы вы сказать мне, как это исправить?

public class Level
{
    public Tile[,] theGrid;
    public Tile[,] TheGrid
    {
        get { return theGrid; }
        set { theGrid = value;}
    }

    public static Tile[,] BuildGrid(int sizeX, int sizeY)
    {
        Tile earth = new Tile("Earth", "Bare Earth. Easily traversable.", ' ', true);
        //this.createTerrain();

        for (int y = 0; y < sizeY; y++)
        {
            for (int x = 0; x < sizeX; x++)
            {
                theGrid[x, y] = earth;
            }
        }
        return theGrid;
    }

А вот сокращенный вариант класса плитки:

public class Tile
{
    //all properties were set to public

    public Tile()
    {
        mineable = false;
        symbol = ' ';
        traversable = true;
        resources = new List<Resource>();
        customRules = new List<Rule>();
        name = "default tile";
        description = "A blank tile";
        area = "";
    }

    public Tile(string tName, string tDescription, char tSymbol, bool tTraversable)
    {
        resources = new List<Resource>();
        customRules = new List<Rule>();
        area = "";
        symbol = tSymbol;
        this.traversable = tTraversable;
        this.name = tName;
        this.description = tDescription;

        mineable = false;
    }

    public void setArea(string area)
    {
        this.area = area;
    }
}

Буду признателен за любую помощь, которую вы можете оказать мне с этим.

Ответы [ 2 ]

2 голосов
/ 24 ноября 2011

Статические методы могут получить доступ только к статическим элементам.

Вам необходимо создать новый массив плиток

 public static Tile[,] BuildGrid(int sizeX, int sizeY)         
 {              
      Tile[,] theGrid = new Tile[sizeX, sizeY];

      .... the rest of the code is the same
 }
1 голос
/ 24 ноября 2011

Точное сообщение об ошибке означает, что доступность Tile меньше общедоступной.
Но в вашем списке Tile она общедоступна.

Возможные причины

  • один из других типов, Resource или Rule объявлен внутренним (т.е. без public)
  • у вас есть другой Tile класс
  • отправленный код для public class Tile неверен.
  • сообщение об ошибке указано неверно
...