當我在我的 c# windows 應用程序項目中定義一個類時,該類應該在項目內(nèi)部可用。所以我應該能夠在我的表單中聲明那種類型的類,而無需將我的類定義為公共類。但是我遇到了一個可訪問性錯誤,當我的類被重新定義為公共而不是默認值(它應該是程序集的內(nèi)部)時,它就會消失。這不是一個重復的問題。這個問題與我見過的其他可訪問性問題不同。我項目中的所有項目(表單、類等)都應該屬于同一個程序集,那么發(fā)生了什么?類的默認范圍是否是內(nèi)部的?研究表明它應該是內(nèi)部的,所以這段代碼應該可以工作......我得到......“不一致的可訪問性。字段類型隊列比 Form1.Queue 更難訪問”請參閱下面的代碼。namespace WindowsFormsApplication3{ public partial class Form1 : Form { public Queue Queue; // <-- PROBLEM LINE public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { } }}這是隊列的定義;我不認為它真的很重要,但它是由評論者要求的;當我公開課程時,所有問題都解決了。但是,如果默認范圍應該是內(nèi)部的,那就沒有意義了,它不應該強迫我公開:namespace WindowsFormsApplication3{ class Queue { private const int DEFAULTQUEUESIZE = 100; private int[] data; private int head = 0, tail = 0; private int numElements = 0; public Queue() { this.data = new int[DEFAULTQUEUESIZE]; } public void Enqueue(int item) { if (this.numElements == this.data.Length) { throw new Exception("Queue full"); } this.data[this.head] = item; this.head++; this.head = this.head % this.data.Length; this.numElements++; } public int Dequeue() { if (this.numElements == 0) { throw new Exception("Queue Empty"); } int queueItem = this.data[this.tail]; this.tail++; this.tail = this.tail % this.data.Length; this.numElements--; return queueItem; } }}
2 回答

ITMISS
TA貢獻1871條經(jīng)驗 獲得超8個贊
因此,通過在您的問題中添加一些猜測,如果有問題的類型是
internal class Queue
那么,很明顯,
public Queue queue;
是一個錯誤 - 你有一個類型的public
字段internal
。你希望它如何工作?問題不在于您Form
無法訪問Queue
. 這是您項目外部的某些東西可以訪問Form
,可以訪問該public
字段,但它無權(quán)訪問該字段的類型。這沒有任何意義,您如何期望外部類能夠理解它無法訪問其類型的字段?
如果您聲明Queue
為public
- 問題就消失了,該類型現(xiàn)在在外部可見。如果您將該字段聲明為internal
(或什至private
) - 錯誤也會消失,因為訪問該字段的任何內(nèi)容也可以訪問該類型。
我希望這能解釋這個問題。附帶說明:聲明public
字段通常是一個錯誤,如果您希望它可以從外部訪問,請使用屬性:
public Queue Queue {get; set;}

紅顏莎娜
TA貢獻1842條經(jīng)驗 獲得超13個贊
您的 Form 已聲明public
并包含 Queue 類的公共字段。由于Queue
不公開,編譯器拒絕編譯您的代碼。如果您想Queue
成為內(nèi)部的,請將該字段聲明為internal
或private
- 2 回答
- 0 關注
- 158 瀏覽
添加回答
舉報
0/150
提交
取消