2012-03-15 4 views
14

Я пытаюсь передать список из одного класса формы в другой. Вот код:Параметр менее доступен, чем метод

List<Branch> myArgus = new List<Branch>(); 

private void btnLogin_Click(object sender, EventArgs e) 
{ 
    // Get the selected branch name 
    string selectedBranch = lbBranches.SelectedItem.ToString(); 
    for (int i = 0; i < myArgus.Count; i++) 
    { 
     if (myArgus[i]._branchName == selectedBranch) 
     { 
      // Open the BranchOverview form 
      BranchOverview branchOverview = new BranchOverview(myArgus[i]); 
      branchOverview.Show(); 
     } 
     else 
     { 
      // Branch doesn't exist for some reason 
     } 
    } 
} 

И тогда в моем BranchOverview классе:

List<Branch> branch = new List<Branch>(); 

public BranchOverview(List<Branch> myArgus) 
{ 
    InitializeComponent(); 

    branch = myArgus; 
} 

Когда я запускаю код, я получаю эту ошибку:

Inconsistent accessibility: parameter type 'System.Collections.Generic.List<Argus.Branch>' is less accessible than method 'Argus.BranchOverview.BranchOverview(System.Collections.Generic.List<Argus.Branch>)' 
+0

Да, ОК. Так что конкретно ваш вопрос? Вы не понимаете, что означает сообщение об ошибке? Или вы понимаете это, но не знаете, как это исправить? Или вы понимаете, как это исправить, но вы застряли в решении двух разных подходов? –

+1

Возможный дубликат [Непоследовательность Доступность: Тип параметра менее доступен, чем метод] (http://stackoverflow.com/questions/6229504/inconsistent-accessibility-parameter-type-is-less-accessible-than-method) – user

ответ

40

Вы должны объявить Branch быть публичным:

public class Branch { 
    . . . 
} 
+0

Ах, это было вроде этого, спасибо. В классе 'Branch' я создавал другие объекты из классов, которые также не были общедоступными, и именно там он меня доставал. Ура! –

+0

Большое спасибо, я изучил ООП раньше, но я все еще забываю об этом. – duykhoa

+0

@duykhoa: приветствую вас – MiMo

1

По умолчанию, поля класса являются private, если нет access modifier ...

8

Как сообщение об ошибке s ays, тип всех параметров метода должен быть как минимум таким же доступным, как и сам метод.

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

public class Branch { .... } 
^^^^^^ 

В качестве альтернативы вы можете изменить способ быть internal вместо public.

internal BranchOverview(List<Branch> myArgus) 
^^^^^^^^ 
+0

Спасибо, Я не знал о «внутреннем». Это сэкономило мне много времени и меняло классные классы для публики (изменив их на публичные, появилось больше ошибок.) Для всех, кого это интересует, дополнительная информация доступна по адресу http://msdn.microsoft.com/en-us/ библиотека/7c5ka91b (v = VS.80) .aspx. – joshhendo

1

Конструктор BranchOverview является public, что означает, что все виды, участвующие в списке формальных параметров должны быть public. Скорее всего, вы не предоставили спецификации доступности для Branch, т.е. вы написали

class Branch { ... } 

, что означает, что Branch является internal.

0

Изменение:

List<Branch> myArgus = new List<Branch>(); 

быть публичным.

Смежные вопросы