2016-12-07 72 views
1

我正在學習C#並遇到錯誤。我所有的方法都是公開的。我正在模擬一本書中的代碼,其中指出「假設您定義了一個名爲Vector的類,並且該Vector是一個引用類型並且具有一個名爲Value的int成員變量」,並且它繼承了Program.cs代碼(我複製了該代碼) 。所以我試圖模擬Vector類,並且當我編譯它時,由於其保護級別,Vector.Value無法訪問。Vector.Value由於其保護級別而無法訪問

的Program.cs:

using System; 

namespace ReferenceType 
{ 
    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      Vector x, y; 
      x = new Vector(); 
      x.Value = 30; 
      Console.WriteLine(y.Value); 
      y.Value = 50; 
      Console.WriteLine(x.Value); 
     } 
    } 
} 

Vector.cs:

namespace ReferenceType 
{ 
    public class Vector 
    { 
     private int Value; 

     public int GetterSetter{ 
      get { return Value; } 
      set { Value = value; } 
     } 
    } 
} 
+1

哪兒了'GetterSetter'來自?你爲什麼要聲明'Value'是私人的?在你的「假設:」引用中似乎沒有提到那些東西。 –

+0

您創建了一個屬性'GetterSetter'而不是'Value',並創建了一個名爲'Value'的私有支持字段。我不認爲這就是你想要做的。也許你想寫'public int Value {get; set;}'或'int _value; public int Value {get {return _value;} set {_value = value}};'? –

+1

.NET中的屬性不僅僅是getter/setter。它們很重要,是班級界面的一部分。它們分別出現在元數據中,被序列化/反序列化,映射到數據庫表等。後臺字段只是一個實現細節 –

回答

3

您嘗試訪問類Vector的private成員,但你有一個public屬性,它暴露了privateValue ,這應該用來代替。

試試這個代碼,

using System; 

namespace ReferenceType 
{ 
    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      Vector x, y; 
      x = new Vector(); 
      // Assign integer value to our public property "GetterSetter" 
      x.GetterSetter= 30; 
      // Access value of "Value" via "GetterSetter" property 
      Console.WriteLine(x.GetterSetter); 
      y.GetterSetter= 50; 
      Console.WriteLine(y.GetterSetter); 
     } 
    } 
} 

更新它會更好地改變你的代碼到

using System; 

namespace ReferenceType 
{ 
    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      Vector x, y; 
      x = new Vector(); 
      x.Value = 30; 
      Console.WriteLine(x.Value); 
      y.Value = 50; 
      Console.WriteLine(y.Value); 
     } 
    } 
} 


//Vector.cs 
using System; 

namespace ReferenceType 
{ 
    public class Vector 
    { 
     private int _value; 

     public int Value{ 
      get { return _value; } 
      set { _value = value; } 
     } 
    } 
} 

你可以閱讀更多關於訪問修飾符這裏msdn.microsoft.com/en-us/library/wxh6fsc7.aspx

+2

對此的解釋是,您試圖從類的外部訪問一個'private'成員,實際上應該訪問'GetterSetter',它暴露'private'字段'Value',並且也是'public'屬性。 – ColinM

+0

@ColinM我不會讓我的答案像第一次發佈那樣簡單:) – gmetax

+0

非常感謝......這很有道理。什麼把我扔掉了,它在書中說,x.Value = 30; // Value是在Vector類中定義的字段 – juice

相關問題