【问题标题】:C#: Custom 2-dim arrays troubleC#:自定义二维数组的麻烦
【发布时间】:2009-11-24 16:05:10
【问题描述】:

我正在尝试使用以下代码创建自定义类Cell 的二维数组:

public class Cell
{
    int top;
    int bottom;
}

public Form1()
{
    Cell[,] elements;
    elements = new Cell[10,10];

    Random r = new Random();

    for (int i=0; i!=10; i++)
    {
        for (int j=0; j!=10; j++)
        {
            elements[i,j].top = r.Next();
        } 
    }
}

但我总是收到以下错误: 可访问性不一致:...以及“Cell is less accessable”...

如何正确定义自定义类的二维数组?

【问题讨论】:

标签: c# arrays class


【解决方案1】:

我怀疑您实际上并没有完全掌握该代码。我怀疑你已经在你的真实代码中离开了 Cell 的声明中的“公共”,并且你有一个公共方法在签名的某个地方使用它。像这样的:

class Cell { ... }

public class Foo
{
    public Cell[,] DoStuff()
    {
    }
}

或者,您可能将 Cell 作为公共类但嵌套在非嵌套类中。

我认为这与数组无关。

但是,如果您发布完整的错误消息而不是“和与此有关的内容”,那会更清楚......如果您发布一个简短但完整的程序来展示问题,这也会有所帮助。

编辑:正如其他人指出的那样,您发布的代码不会编译,但出于不同的原因。我怀疑您编造了一条关于可访问性不一致的错误消息,因此我强烈怀疑您发布的代码实际上根本不像您的真实代码 - 至少在可访问性方面。

同样,没有看到真实代码,很难给出准确的答案。

【讨论】:

  • 他正在尝试访问私有的顶部字段。
  • @Maximilian:非常正确。不过,我怀疑我们还没有看到真正的代码。
【解决方案2】:

属性的默认可访问性是私有的。试试这个:

public class Cell
{
    public int top;
    public int bottom;
}

更好的是,让它们成为自动属性:

public class Cell
{
    public int top { get; set; }
    public int bottom { get; set; }
}

【讨论】:

    【解决方案3】:

    可访问性错误与数组创建无关。该错误最常见的场景是带有私有或内部类型参数的公共方法。

    【讨论】:

      【解决方案4】:

      我建议您使用 topbottom 字段创建属性。这些具有private 访问权限,因此出现错误:

      public class Cell
      {
          public int top { get; set; };
          public int bottom { get; set; };
      }
      

      【讨论】:

        猜你喜欢
        • 2015-02-06
        • 1970-01-01
        • 2021-04-04
        • 1970-01-01
        • 1970-01-01
        • 2011-07-03
        • 1970-01-01
        • 2012-03-17
        • 1970-01-01
        相关资源
        最近更新 更多