为什么我的私有数组给我一个不一致的访问错误使用公共属性来获得它



感谢您的关注,并提前感谢您可能有任何建议

我想保持我的数组'notes'私有,因为没有其他类应该篡改它。

我确实需要其他类来读取这些数据,所以我认为为它创建一个属性是封装它的正确方法。

但是我在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;
    }
}

再次表示感谢吉姆

您的问题是您的note结构是私有的,因此只能对同一文件中的类访问。

但是当你希望从外部世界访问这个时,人们无法访问note类型,这意味着当你试图做:

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

您的错误是说类型note无法公开解决。如果您需要人们从属性访问该结构体,则必须使结构体public:

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

还有一件事要注意,如果你不想让任何其他类修改你的笔记,那么我建议你把你的属性从返回一个数组改为返回一个ReadOnlyCollection<note>

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

这样做的原因就像它对使用你的对象的类说的那样,这个集合不是用来修改的,只是用来读取的。我发现这比标准数组更具描述性,如果我使用您的类会告诉我,没有理由对集合内的对象进行更改。

Notes字段是公共的,返回note对象的数组。同时,note结构体的声明是私有的。这意味着"外部世界"不知道Notes字段返回什么。

notes结构体从private改为public将解决这个问题。

将struct设为public

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

最新更新