Khả năng truy cập không nhất quán: Loại tham số ít truy cập hơn phương thức


227

Về cơ bản, tôi đang cố gắng truyền một đối tượng (một tham chiếu đến người dùng đang đăng nhập) giữa hai biểu mẫu. Hiện tại, tôi có một cái gì đó dọc theo các dòng này trong mẫu đăng nhập:

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

trên mẫu tiếp theo (khách hàng), tôi có:

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

    public clients(ACTInterface _oActInt)

... kết quả là tôi nhận được:

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

Tôi không thực sự hiểu vấn đề là gì - cả hai trường đều là riêng tư và được truy cập bằng phương thức công khai có liên quan từ biểu mẫu. Googling không thực sự có ích, vì nó chỉ hướng đến một yếu tố là công khai và riêng tư khác, không phải là trường hợp ở đây.

Có ai giúp không?

Câu trả lời:


353

Trình xây dựng của publiclớp clientspublicnhưng nó có một tham số của kiểu ACTInterfaceđó private(nó được lồng trong một lớp?). Bạn không thể làm điều đó. Bạn cần phải làm cho ACTInterfaceít nhất là có thể truy cập như clients.


2
Để biết thêm thông tin, hãy kiểm tra bài viết MSDN về lỗi CS0051
Alexei Levenkov

5
Điều này đã giúp tôi. Tôi đã cố gắng làm như sau: JsonConvert.DeserializeObject <List <Name_Of_My_Model >> (answer.Content.ReadAsStringAsync (). Result); Lớp "Name_Of_My_Model" không được đặt thành Công khai hoặc Riêng tư. Hóa ra tôi CẦN thiết lập "Name_Of_My_Model" (lớp) thành công khai để được sử dụng trong phương thức "công khai" có trình trang trí WebMethod phía trên nó cho một cuộc gọi ajax mà tôi đang thực hiện.
Eric Milliot-Martinez


1
Và @ EricMilliot-Martinez, bình luận của bạn đã giúp tôi. Tôi cần phải thêm Công khai vào một trong các lớp học của mình. Cảm ơn.
Fütemire

81

Làm cho lớp học công khai.

class NewClass
{

}

giống như:

internal class NewClass
{

}

vì vậy lớp học phải được công khai


27

Nếu âm thanh giống như loại ACTInterfacekhông public, nhưng đang sử dụng khả năng truy cập mặc định của một trong hai internal(nếu nó ở mức cao nhất) hoặc private(nếu nó được lồng trong loại khác).

Đưa ra loại publicsửa đổi sẽ sửa chữa nó.

Một cách tiếp cận khác là tạo ra cả kiểu và phương thức internal, nếu đó là ý định của bạn.

Vấn đề không phải là khả năng truy cập của trường ( oActInterface), mà là ACTInterfacechính loại đó.


9

Khả năng tiếp cận của các loại là gì support.ACTInterface. Lỗi cho thấy nó không công khai.

Bạn không thể để lộ chữ ký phương thức công khai trong đó một số loại tham số của chữ ký không công khai. Không thể gọi phương thức từ bên ngoài vì người gọi không thể xây dựng các tham số cần thiết.

Nếu bạn support.ACTInterfacecông khai sẽ loại bỏ lỗi này. Hoặc giảm khả năng tiếp cận của phương thức biểu mẫu nếu có thể.


4

Vấn đề dường như không nằm ở biến số mà là do khai báo ACTInterface. ACTInterface có được tuyên bố là nội bộ không?


2

Khi tôi nhận được lỗi này, tôi đã có một lớp "người trợ giúp" mà tôi đã không tuyên bố là công khai gây ra vấn đề này trong lớp đã sử dụng lớp "người trợ giúp". Làm cho lớp "người trợ giúp" công khai giải quyết lỗi này, như trong:

công khai ServiceClass {công khai ServiceClass (HelperClass _helper) {}}

lớp công khai HelperClass {} // Lưu ý HelperClass công khai đã giải quyết vấn đề của tôi.

Điều này có thể giúp người khác gặp phải điều này.


2
parameter type 'support.ACTInterface' is less accessible than method    
'support.clients.clients(support.ACTInterface)' 

Lỗi nói 'support.ACTInterface' khó truy cập hơn vì bạn đã đặt giao diện ở chế độ riêng tư, ít nhất là đặt nội bộ hoặc đặt ở chế độ công khai.


1

Bạn có thể nhận Parameter (lớp có ít khả năng truy cập hơn) objectsau đó chuyển đổi nó thành lớp của bạn theo astừ khóa.


Bạn không nghĩ sao? bạn có thể đã thêm điều này như là một bình luận.
surajs1n

0

Nếu lỗi này xảy ra khi bạn muốn sử dụng một lớp có thể ở dạng mới, bạn nên đặt định nghĩa lớp trong

Formname.Designer.cs

thay vì tệp Formname.cs.


0

Sau khi cập nhật mô hình khung thực thể, tôi thấy lỗi này lây nhiễm một số tệp trong giải pháp của mình. Tôi chỉ cần nhấp chuột phải vào tệp .edmx và tệp TT của mình và nhấp vào "Chạy Công cụ tùy chỉnh" và điều đó đã giúp tôi trở lại ngay sau khi khởi động lại Visual Studio 2012.


-3

Hãy thử làm cho nhà xây dựng của bạn riêng tư như thế này:

private Foo newClass = new Foo();

Không hẳn vậy. Điều này là do bảo vệ lồng nhau.
ForcedFakeLaugh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.