Я пытаюсь передать объект (в основном, ссылку на пользователя, вошедшего в систему) между двумя формами. На данный момент у меня есть что-то вроде этого в форме входа в систему:
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 не очень помогает, так как он указывает на то, что один элемент является общедоступным, а другой - частным, что здесь не так.
Кто-нибудь поможет?
Сделайте класс публичным.
такой же как:
поэтому класс должен быть публичным
источник
Если звучит так, как будто типа
ACTInterface
нетpublic
, но использует доступность по умолчанию либоinternal
(если это верхний уровень), либоprivate
(если он вложен в другой тип).Предоставление типа
public
модификатор исправит это.Другой подход заключается в создании типа и метода
internal
, если это ваше намерение.Проблема не в доступности поля (
oActInterface
), а в самом типеACTInterface
.источник
Что такое доступность типа
support.ACTInterface
. Ошибка предполагает, что это не публично.Вы не можете предоставить публичную подпись метода, где некоторые типы параметров подписи не являются публичными. Невозможно вызвать метод извне, так как вызывающая сторона не может создать требуемые параметры.
Если вы сделаете это
support.ACTInterface
публичным, это уберет эту ошибку. В качестве альтернативы, если возможно, уменьшите доступность метода формы.источник
Проблема не в переменной, а в объявлении ACTInterface. ACTInterface объявлен как внутренний случайно?
источник
Когда я получил эту ошибку, у меня был класс «помощник», который я не объявил как открытый, который вызвал эту проблему внутри класса, который использовал класс «помощник». Публичный класс helper решил эту ошибку, как в:
public ServiceClass {public ServiceClass (HelperClass _helper) {}}
public class HelperClass {} // Обратите внимание на общедоступный HelperClass, который решил мою проблему.
Это может помочь кому-то еще, кто сталкивается с этим.
источник
Ошибка говорит, что «support.ACTInterface» менее доступен, потому что вы сделали интерфейс закрытым, по крайней мере сделайте его внутренним или сделайте его общедоступным.
источник
Вы можете получить параметр (класс, который имеет меньшую доступность), а
object
затем преобразовать его в свой класс поas
ключевому слову.источник
Если эта ошибка возникает, когда вы хотите использовать переменную класса в новой форме, вы должны поместить определение класса в
вместо файла Formname.cs.
источник
После обновления модели структуры сущностей я обнаружил, что эта ошибка заражает несколько файлов в моем решении. Я просто щелкнул правой кнопкой мыши по файлу .edmx и моему файлу TT и нажал «Запустить пользовательский инструмент», и после перезапуска Visual Studio 2012 я снова оказался в праве.
источник
Попробуйте сделать ваш конструктор приватным, вот так:
источник