为什么我的私有数组使用 public 属性 给我一个不一致的可访问性错误

Why does my private array give me an inconsistent accessibility error using a public property to get it

感谢您的浏览并提前感谢您的任何建议

我想将我的数组 'notes' 保密,因为其他 class 不应篡改它。

我确实需要其他 classes 来读取该数据,因此认为为它创建一个 属性 是封装它的正确方法。

但是我在 Unity 控制台中收到此错误

Assets/testScripts/rhythmGameNotes.cs(22,23): error CS0053: Inconsistent
accessibility: property type `rhythmGameNotes.note[]' is less accessible      
than property `rhythmGameNotes.Notes'

下面是源代码(截了一点)

private struct note
{
    public float y;
    public float noteDuration;
    public float noteSample;
    public GameObject go;
}

private note[] notes; // this should remain hidden from other classes

public note[] Notes
{
    get
    {
        return notes;
    }
}

再次感谢

吉姆

制作你的结构public

public struct note
{
    public float y;
    public float noteDuration;
    public float noteSample;
    public GameObject go;
}

Notes 字段是 public,返回 note 个对象的数组。同时,note 结构的声明是私有的。这意味着 "outside world" 对 Notes 字段 returns.

的内容一无所知

notes 结构从私有更改为 public 将解决问题。

您遇到的问题是您的 note 结构是私有的,因此只能由同一文件中的 classes 访问。

但是由于您希望从外部世界访问此内容,因此人们无法访问 note 类型,这意味着当您尝试这样做时:

public note[] Notes
{
    get
    {
       return notes;
    }
}

您的错误是类型 note 无法公开解析。如果您要求人们从 属性 访问此结构,您将必须创建结构 public:

public struct note
{
    public float y;
    public float noteDuration;
    public float noteSample;
    public GameObject go;
}

需要注意的另一件事是,如果您不希望任何其他 class 修改您不错的 collection 笔记,那么我建议您将 属性 更改为返回一个返回 ReadOnlyCollection<note>.

的数组
public ReadOnlyCollection<note> Notes
{
    get
    {
        return new ReadOnlyCollection<note>(notes);
    }
}

使用您的 object 对 classes 说的原因,此 collection 不用于修改,仅用于阅读。我发现这比标准数组更具描述性,如果我使用你的 class 会告诉我没有理由对 collection.[= 中的 object 进行更改18=]