2012-03-15 29 views
14

Tôi đang cố chuyển danh sách từ một lớp biểu mẫu này sang lớp khác. Dưới đây là các mã:Tham số ít truy cập hơn phương pháp

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 
     } 
    } 
} 

Và sau đó trong BranchOverview lớp học của tôi:

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

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

    branch = myArgus; 
} 

Khi tôi chạy mã, tôi nhận được lỗi này:

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

Có, OK. Vậy câu hỏi của bạn là gì? Bạn có hiểu ý nghĩa của thông báo lỗi không? Hay bạn hiểu nó nhưng bạn không biết cách sửa nó? Hay bạn hiểu cách khắc phục nó, nhưng bạn bị mắc kẹt khi quyết định giữa hai cách tiếp cận khác nhau? –

+1

Có thể trùng lặp của [Khả năng truy cập không phù hợp: Loại tham số ít truy cập hơn so với phương pháp] (http://stackoverflow.com/questions/6229504/inconsistent-accessibility-parameter-type-is-less-accessible-than-method) – user

Trả lời

40

Bạn phải khai báo Branch được công khai:

public class Branch { 
    . . . 
} 
+0

Ah, đó là loại của nó, cảm ơn. Trong lớp 'Branch' tôi đã tạo ra các đối tượng khác từ các lớp mà cũng không được công khai, đó là nơi nó nhận được tôi. Chúc mừng! –

+0

Cảm ơn rất nhiều, tôi đã học được OOP trước đây nhưng tôi vẫn quên điều này. – duykhoa

+0

@duykhoa: bạn rất hoan nghênh – MiMo

1

Theo mặc định, các lĩnh vực của một lớp là private nếu không có access modifier hiện diện ...

8

Là thông báo lỗi ays, kiểu của tất cả các tham số của phương thức phải ít nhất là có thể truy cập như chính phương thức đó.

Bạn cần đặt công khai Branch lớp học nếu bạn đang sử dụng nó làm tham số trong phương thức công khai.

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

Hoặc bạn có thể thay đổi phương pháp của bạn sẽ được internal thay vì public.

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

Cảm ơn, Tôi không biết về "nội bộ". Nó đã giúp tôi tiết kiệm rất nhiều thời gian và thay đổi tất cả các lớp học thành công cộng (thay đổi một lớp thành công khai, nhiều lỗi xảy ra hơn.) Đối với bất kỳ ai quan tâm, có thêm thông tin tại http://msdn.microsoft.com/en-us/ thư viện/7c5ka91b (v = VS.80) .aspx. – joshhendo

1

Các constructor của BranchOverviewpublic, có nghĩa là tất cả các loại tham gia vào danh sách tham số hình thức của nó cũng phải public. có lẽ hầu hết bạn chưa cung cấp một đặc điểm kỹ thuật truy cập cho Branch, ví dụ: bạn đã viết

class Branch { ... } 

có nghĩa là Branchinternal.

0

Thay đổi:

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

được công khai.

Các vấn đề liên quan