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

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

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

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

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

Ответ 1

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

Ответ 2

Сделать класс общедоступным.

class NewClass
{

}

совпадает с:

internal class NewClass
{

}

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

Ответ 3

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

Придавая тип модификатору public, он исправит его.

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

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

Ответ 4

Какова доступность типа support.ACTInterface. Ошибка говорит о том, что она не является общедоступной.

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

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

Ответ 5

Проблема не связана с переменной, а с объявлением ACTInterface. Является ли ACTInterface объявленным как внутренним, случайно?

Ответ 6

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

Formname.Designer.cs

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

Ответ 7

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

Ответ 8

что когда-либо вы предоставляете класс ActInterface, находится под частным классом, поэтому он получает ошибку

измените этот тип класса на Public ActInterface, он разрешит

Ответ 9

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

private Foo newClass = new Foo();