感谢您的关注,并提前感谢您可能有任何建议
我想保持我的数组'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;
}