簡體   English   中英

由於其保護級別而無法訪問?

[英]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。 變量似乎是在公共類中聲明的,為什么不能訪問它們? 我嘗試尋找解決方案,但我發現的所有問題都太復雜了,我無法得到可以轉化為我自己理解的答案。 所有幫助表示贊賞!

即使變量在公共類中,它們也必須聲明為公共類,因為默認情況下它們是私有的。

請參閱:訪問修飾符

類成員,包括嵌套類和結構,可以是 public、protected internal、protected、internal 或 private。 類成員和結構成員(包括嵌套類和結構)的訪問級別默認為私有

最佳做法是對公共變量使用大寫的名稱和屬性

public A { get; set; }

屬性允許您控制成員的讀/寫訪問,以及在讀取或設置它們時添加邏輯。

訪問修飾符是用於指定成員或類型聲明的可訪問性的關鍵字。 本節介紹四種訪問修飾符:

可以使用訪問修飾符指定以下五個可訪問性級別:

  1. public :訪問不受限制。
  2. protected :訪問僅限於包含類或從包含類派生的類型。
  3. 內部:訪問僅限於當前程序集。
  4. protected internal:訪問僅限於從包含類派生的當前程序集或類型。
  5. private :訪問僅限於包含類型。

C#中的每個成員都是隱式私有的,因此在您的問題中, a,bc被定義為private ,因此您無法從methodTest外部訪問它們。 有關更多信息,您可能需要查看此頁面:訪問修飾符(C# 編程指南)

祝你好運! :)

不是由構造函數引起的。 您收到錯誤是因為字段methodTest.b是私有的(在 C# 中,字段默認是私有的;您需要指定一個顯式修飾符,例如public int b; )。

您的問題是,在 C# 中,如果變量(在本例中為fields )沒有用訪問修飾符專門標記,則它們被標記為private

https://msdn.microsoft.com/en-us/library/wxh6fsc7.aspx

類和結構默認為internal 、字段、方法、事件、屬性等(基本上, classesstructures所有成員)默認為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM