Непоследовательная доступность: тип параметра менее доступен, чем метод

c# object

379905 просмотра

10 ответа

Я пытаюсь передать объект (в основном, ссылку на пользователя, вошедшего в систему) между двумя формами. На данный момент у меня есть что-то вроде этого в форме входа в систему:

private ACTInterface oActInterface;

public void button1_Click(object sender, EventArgs e)
    {
        oActInterface = new ACTInterface(@"\\actserver\Database\Premier.pad",this.textUser.Text,this.textPass.Text);

        if (oActInterface.checkLoggedIn())
        {
            //user has authed against ACT, so we can carry on
            clients oClientForm = new clients(oActInterface);
            this.Hide();
            oClientForm.Show();
        }
        else...

на следующей форме (клиенты) у меня есть:

public partial class clients : Form
{
    private ACTInterface oActInt {get; set;}

    public clients(ACTInterface _oActInt)

... в результате чего я получаю:

Error   1   Inconsistent accessibility: 
parameter type 'support.ACTInterface' is less accessible than method    
'support.clients.clients(support.ACTInterface)'  
c:\work\net\backup\support\support\clients.cs   20  16  support

Я не очень понимаю, в чем проблема - оба поля являются закрытыми, и доступ к ним осуществляется соответствующим открытым методом из формы. Поиск в Google не очень помогает, поскольку он просто указывает на то, что один элемент является общедоступным, а другой - частным, что здесь не так.

Кто-нибудь поможет?

Автор: dodgrile Источник Размещён: 12.11.2019 09:26

Ответы (10)


309 плюса

Решение

Конструктор publicкласса clientsявляется , publicно он имеет параметр типа , ACTInterfaceкоторый private(она вложена в классе?). Вы не можете сделать это. Вы должны сделать ACTInterfaceпо крайней мере так же доступно, как clients.

Автор: jason Размещён: 03.06.2011 03:55

66 плюса

Сделайте класс публичным.

class NewClass
{

}

такой же как:

internal class NewClass
{

}

поэтому класс должен быть публичным

Автор: Nisha Размещён: 26.03.2012 03:32

26 плюса

Если звучит как тип ACTInterfaceне public, но используют доступ по умолчанию либо internal(если это верхний уровень) или private(если он вложен в другом типе).

Предоставление типа publicмодификатор исправит это.

Другой подход заключается в создании типа и метода internal, если это ваше намерение.

Проблема не в доступности поля ( oActInterface), а в самом типе ACTInterface.

Автор: Marc Gravell Размещён: 03.06.2011 03:56

8 плюса

Что такое доступность типа support.ACTInterface. Ошибка предполагает, что это не публично.

Вы не можете предоставить публичную подпись метода, где некоторые типы параметров подписи не являются публичными. Невозможно вызвать метод извне, так как вызывающая сторона не может создать требуемые параметры.

Если вы сделаете это support.ACTInterfaceпубличным, это уберет эту ошибку. В качестве альтернативы, если возможно, уменьшите доступность метода формы.

Автор: James Gaunt Размещён: 03.06.2011 03:55

4 плюса

Кажется, проблема не в переменной, а в объявлении ACTInterface. ACTInterface объявлен как внутренний случайно?

Автор: Craig W. Размещён: 03.06.2011 03:57

2 плюса

Когда я получил эту ошибку, у меня был класс "помощник", который я не объявил как открытый, который вызвал эту проблему внутри класса, который использовал класс "помощник". Публичный класс helper решил эту ошибку, как в:

public ServiceClass {public ServiceClass (HelperClass _helper) {}}

public class HelperClass {} // Обратите внимание на общедоступный HelperClass, который решил мою проблему.

Это может помочь кому-то еще, кто сталкивается с этим.

Автор: Keenan Stewart Размещён: 04.04.2018 12:00

0 плюса

Если эта ошибка возникает, когда вы хотите использовать переменную класса в новой форме, вы должны поместить определение класса в

Formname.Designer.cs

вместо файла Formname.cs.

Автор: ltsstar Размещён: 28.06.2013 01:14

0 плюса

После обновления модели структуры сущностей я обнаружил, что эта ошибка заражает несколько файлов в моем решении. Я просто щелкнул правой кнопкой мыши по файлу .edmx и моему файлу TT и нажал «Запустить пользовательский инструмент», и после перезапуска Visual Studio 2012 я снова оказался в праве.

Автор: Simon Kiely Размещён: 25.07.2013 02:16

0 плюса

Вы можете получить параметр (класс, который имеет меньшую доступность), а objectзатем преобразовать его в свой класс по asключевому слову.

Автор: Sadeq Shajary Размещён: 10.10.2018 12:03

-3 плюса

Попробуйте сделать ваш конструктор приватным, вот так:

private Foo newClass = new Foo();
Автор: Yousri Mousa Размещён: 16.12.2017 12:21
Вопросы из категории :
32x32