Не удается получить доступ к методу, потому что он менее доступен - c #

1

Я пишу форму в С#, которая должна обращаться ко всем внутренним классам, содержащим структуру. Я получаю сообщение об ошибке:

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 вместо внутреннего модуля?

Теги:
struct
forms

2 ответа

1
Лучший ответ

Ваша структура MusicData определяется как внутренняя структура Module внутреннего класса.

Таким образом, вы не можете получить доступ к чему-то общественному, если "путь" к функции блокируется "нижним" модификатором доступа (внутренним).

Модификатор внутреннего доступа в основном предоставляет доступ любому пользователю в той же сборке, в то время как модификатор общедоступного доступа предоставляет доступ всем.

Таким образом, вам нужно либо изменить свои внутренности на общественность, либо изменить общественность на внутреннюю.

Читайте еще несколько здесь.

1

Module и Module.MusicData являются внутренними, поэтому они видны только с помощью кода внутри одной сборки, а конструктор frmSelectMusic является общедоступным, поэтому его могут видеть все. Этот публичный конструктор (который может быть замечен всеми) принимает в качестве аргумента Module.MusicData структуру, которая не может быть видна всем, есть конфликт. Таким образом, вы должны либо изменить конструктор frmSelectMusic на внутренние, либо на модули Module и Module.MusicData для публики.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню