我在c#中编写一个表单,必须访问包含结构的所有内部类。 我得到的错误是这样的:
public frmSelectMusic(int mode, Module.MusicData data)
{
InitializeComponent();
switch (mode)
{
case 1:
this.Text = "BGM";
compileList("BGM");
break;
case 2:
this.Text = "BGS";
compileList("BGS");
break;
case 3:
this.Text = "ME";
compileList("ME");
break;
case 4:
this.Text = "SE";
compileList("SE");
break;
}
this.mode = mode;
if (data.name != "")
{
if (objList.Items.Contains(data.name))
{
objList.SelectedItem = data.name;
cmdVolume.Value = data.volume / 10;
cmdPitch.Value = (data.pitch - 50) / 10;
}
}
}
这是模块:
internal class Module
{
internal static string mainPath;
internal static string projectPath;
internal struct MusicData
{
public int type;
public string name;
public int volume;
public int pitch;
}
}
我错过了什么?我应该在模块中使用public而不是internal吗?
答案 0 :(得分:1)
您的结构MusicData
被定义为内部类Module
的内部结构。
因此,如果函数的“路径”被“较低”访问修饰符(内部)阻止,则无法访问公共内容。
内部访问修饰符基本上授予对同一程序集中任何人的访问权限,而公共访问修饰符则授予对每个人的访问权限。
因此,您需要将内部内容更改为公开内容或将公众更改为内部内容。
再阅读Here。
答案 1 :(得分:1)
模块和Module.MusicData类是内部的,因此只能由同一程序集中的代码可见,而frmSelectMusic构造函数是公共的,所以每个人都可以看到。这个公共构造函数(每个人都可以看到)作为一个参数Module.MusicData结构,每个人都看不到,存在冲突。因此,您应该将frmSelectMusic构造函数更改为internal,或者将Module和Module.MusicData类更改为public。