Aksesibilitas yang Tidak Konsisten: Jenis parameter kurang dapat diakses daripada metode


227

Saya mencoba untuk melewatkan objek (referensi ke pengguna yang saat ini masuk, pada dasarnya) antara dua bentuk. Saat ini, saya memiliki sesuatu di sepanjang baris ini dalam formulir login:

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

pada formulir berikutnya (klien), saya punya:

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

    public clients(ACTInterface _oActInt)

... yang menghasilkan saya mendapatkan:

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

Saya tidak benar-benar mengerti apa masalahnya - kedua bidang bersifat pribadi, dan diakses dengan metode publik yang relevan dari formulir. Googling tidak terlalu membantu, karena hanya menunjuk ke satu elemen yang bersifat publik dan yang lain pribadi, yang tidak terjadi di sini.

Adakah yang bisa membantu?

Jawaban:


353

Konstruktor publickelas clientsadalah publictetapi memiliki parameter tipe ACTInterfaceyang private(bersarang di kelas?). Kamu tidak bisa melakukan itu Anda harus membuat ACTInterfacesetidaknya dapat diakses clients.


2
Untuk informasi lebih lanjut, periksa artikel MSDN tentang kesalahan CS0051
Alexei Levenkov

5
Ini membantu saya. Saya mencoba melakukan hal berikut: JsonConvert.DeserializeObject <Daftar <Name_Of_My_Model>> (response.Content.RontAs.ReadAsStringAsync (). Hasil); Kelas "Name_Of_My_Model" tidak disetel untuk Publik atau Privat. Ternyata saya PERLU untuk mengatur "Name_Of_My_Model" (kelas) ke publik untuk digunakan dalam metode "publik" yang memiliki dekorator WebMethod di atasnya untuk panggilan ajax yang saya lakukan.
Eric Milliot-Martinez


1
Dan @ EricMilliot-Martinez, komentar Anda membantu saya. Saya perlu menambahkan Publik ke salah satu kelas saya juga. Terima kasih.
Fütemire

81

Jadikan kelas publik.

class NewClass
{

}

sama dengan:

internal class NewClass
{

}

jadi kelas harus bersifat publik


27

Jika kedengarannya jenisnya ACTInterfacebukan public, tetapi menggunakan aksesibilitas default baik internal(jika tingkat atas) atau private(jika bersarang di tipe lain).

Memberi tipe publicpengubah akan memperbaikinya.

Pendekatan lain adalah membuat jenis dan metode internal, jika itu maksud Anda.

Masalahnya bukan aksesibilitas bidang ( oActInterface), melainkan tipe ACTInterfaceitu sendiri.


9

Apa aksesibilitas tipe tersebut support.ACTInterface. Kesalahan menunjukkan itu bukan untuk umum.

Anda tidak dapat mengekspos tanda tangan metode publik di mana beberapa tipe parameter tanda tangan tidak publik. Tidak mungkin memanggil metode dari luar karena penelepon tidak dapat membuat parameter yang diperlukan.

Jika Anda membuat support.ACTInterfacepublik yang akan menghapus kesalahan ini. Atau kurangi aksesibilitas metode formulir jika memungkinkan.


4

Masalahnya tampaknya tidak dengan variabel melainkan dengan deklarasi ACTInterface. Apakah ACTInterface dinyatakan sebagai masalah internal?


2

Ketika saya menerima kesalahan ini, saya memiliki kelas "pembantu" yang saya tidak nyatakan sebagai publik yang menyebabkan masalah ini di dalam kelas yang menggunakan kelas "pembantu". Membuat kelas "helper" publik memecahkan kesalahan ini, seperti pada:

ServiceClass publik {public ServiceClass (HelperClass _helper) {}}

HelperClass kelas publik {} // Catat HelperClass publik yang memecahkan masalah saya.

Ini dapat membantu orang lain yang mengalami ini.


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

Kesalahan mengatakan 'support.ACTInterface' kurang dapat diakses karena Anda telah menjadikan antarmuka sebagai pribadi, setidaknya menjadikannya internal atau menjadikannya publik.


1

Anda bisa mendapatkan Parameter (kelas yang memiliki aksesibilitas lebih rendah) objectsaat mengonversinya ke kelas Anda dengan askata kunci.


Bukankah begitu? Anda bisa menambahkan ini sebagai komentar.
surajs1n

0

Jika kesalahan ini terjadi ketika Anda ingin menggunakan classvariable di formulir baru, Anda harus meletakkan definisi kelas di

Formname.Designer.cs

bukannya file Formname.cs.


0

Setelah memperbarui model kerangka entitas saya, saya menemukan kesalahan ini menginfeksi beberapa file dalam solusi saya. Saya cukup klik kanan pada file .edmx dan file TT saya dan klik "Run Custom Tool" dan itu membuat saya benar lagi setelah restart Visual Studio 2012.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.