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?
Jadikan kelas publik.
sama dengan:
jadi kelas harus bersifat publik
sumber
Jika kedengarannya jenisnya
ACTInterface
bukanpublic
, tetapi menggunakan aksesibilitas default baikinternal
(jika tingkat atas) atauprivate
(jika bersarang di tipe lain).Memberi tipe
public
pengubah akan memperbaikinya.Pendekatan lain adalah membuat jenis dan metode
internal
, jika itu maksud Anda.Masalahnya bukan aksesibilitas bidang (
oActInterface
), melainkan tipeACTInterface
itu sendiri.sumber
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.ACTInterface
publik yang akan menghapus kesalahan ini. Atau kurangi aksesibilitas metode formulir jika memungkinkan.sumber
Masalahnya tampaknya tidak dengan variabel melainkan dengan deklarasi ACTInterface. Apakah ACTInterface dinyatakan sebagai masalah internal?
sumber
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.
sumber
Kesalahan mengatakan 'support.ACTInterface' kurang dapat diakses karena Anda telah menjadikan antarmuka sebagai pribadi, setidaknya menjadikannya internal atau menjadikannya publik.
sumber
Anda bisa mendapatkan Parameter (kelas yang memiliki aksesibilitas lebih rendah)
object
saat mengonversinya ke kelas Anda denganas
kata kunci.sumber
Jika kesalahan ini terjadi ketika Anda ingin menggunakan classvariable di formulir baru, Anda harus meletakkan definisi kelas di
bukannya file Formname.cs.
sumber
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.
sumber
Coba jadikan konstruktor Anda pribadi seperti ini:
sumber