[英]Inaccessible due to its protection level?
總的來說,我對編碼還是很陌生,雖然這個簡單的程序只是為了測試構造函數的工作原理,但我仍然想知道為什么我會收到這個錯誤。
using System;
public class methodTest
{
int a;
int b;
int c;
public methodTest(int i, int j, int k)
{
a = i;
b = j;
c = k;
}
}
public class methodObj
{
static void Main()
{
methodTest obj = new methodTest(10, 20, 30);
Console.WriteLine("obj = " + obj.b);
Console.ReadKey();
}
}
我不完全確定為什么我收到錯誤。 問題出在 Console.WriteLine 上,它聲明它無法訪問 obj.b。 變量似乎是在公共類中聲明的,為什么不能訪問它們? 我嘗試尋找解決方案,但我發現的所有問題都太復雜了,我無法得到可以轉化為我自己理解的答案。 所有幫助表示贊賞!
訪問修飾符是用於指定成員或類型聲明的可訪問性的關鍵字。 本節介紹四種訪問修飾符:
可以使用訪問修飾符指定以下五個可訪問性級別:
C#
中的每個成員都是隱式私有的,因此在您的問題中, a,b
和c
被定義為private
,因此您無法從methodTest
外部訪問它們。 有關更多信息,您可能需要查看此頁面:訪問修飾符(C# 編程指南)
祝你好運! :)
這不是由構造函數引起的。 您收到錯誤是因為字段methodTest.b
是私有的(在 C# 中,字段默認是私有的;您需要指定一個顯式修飾符,例如public int b;
)。
您的問題是,在 C# 中,如果變量(在本例中為fields
)沒有用訪問修飾符專門標記,則它們被標記為private
。
https://msdn.microsoft.com/en-us/library/wxh6fsc7.aspx
類和結構默認為internal
、字段、方法、事件、屬性等(基本上, classes
和structures
所有成員)默認為private
。
將int a
更改為public int a
(對於 b/c 也是如此)將修復它。
不過,我建議不要這樣做。 相反,為每個屬性創建一個屬性。
public A { get { return a; } set { a = value; } }
public B { get { return b; } set { b = value; } }
public C { get { return c; } set { c = value; } }
如果您想從它們被實例化的類之外訪問您的整數 a、b 和 c,您必須將它們聲明為public
。 但是,更簡潔的選擇是使用屬性,例如:
public int A {get; set;}
public int B {get; set}
public int C {get; set;}
這使您可以潛在地限制來自外部類的寫訪問,同時仍然保持屬性打開以供讀取,例如:
public int A {get; private set;}
public int B {get; private set}
public int C {get; private set;}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.