2017-03-25 56 views
-1

我不知道如何正確輸出私有字符串子。例如,如果我想在私人中輸出「名稱」,編譯器會顯示錯誤:由於其保護級別而無法訪問。正確的方法是使用public「名稱」,而不是私人「名稱」?因爲我想通過私人訪問它,但不知道如何解決錯誤。輸出私有字符串子

class Person 
     { 
      private string name, lastname; 
      public string Name 
      { 
       get { return name; } 
       set { name = value; } 
      } 

      public string Lastname 
      { 
       get { return lastname; } 
       set { lastname = value; } 

      } 
     } 

class Program 
    { 
     static void Main(string[] args) 
     { 
      Person person1 = new Person("Matt", "Houdson"); 

Console.WriteLine("Name: {0}", person1.name); 


    //is inaccessible due its protection level 

回答

1

Name財產(以大寫字母「N」)被配置爲可公開訪問的「吸氣」爲私人name財產,所以你應該使用Name(大寫訪問這個人的名字'N'):

Console.WriteLine("Name: {0}", person1.Name);

+0

但這是正確的方法嗎?這意味着我不能通過私人字符串訪問公共字符串? – Slasher

+0

是的,使用「getter」和「setter」方法創建公共訪問屬性以允許對私有屬性進行受控訪問是非常標準的。這實質上是封裝背後的原理(https://en.wikipedia.org/wiki/Encapsulation_(computer_programming)) – nb1987

+0

可能通過私有「名稱」訪問公共「名稱」? – Slasher

1

我看到節目可使用兩種語法錯誤。 1)。你忘了區分大小寫,

`Console.WriteLine("Name: {0}", person1.name);` 

person1.name應該person1.Name所取代。 (person1.name是私人的)

2)。你忘了明確定義class Person中的兩個參數構造函數。嗯,我已經重新編寫的代碼爲你下面,就請看看:

class Person 
    { 

     private string name, lastname; 

     public Person(string N, string LN) 
     { 
      name = N; 
      lastname = LN; 

     } 
     public string Name 
     { 
      get { return name; } 
      set { name = value; } 
     } 

     public string Lastname 
     { 
      get { return lastname; } 
      set { lastname = value; } 

     } 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      Person person1 = new Person("Matt", "Houdson"); 

      Console.WriteLine("Name: {0}", person1.Name); 
      Console.ReadKey(); 

     } 
    } 
1

我想補充一點的評論,但我沒有信譽添加評論。

只是想讓你知道Slasher是對的。如果你想要做的就是阻止人們在person1建成後改變人名,那麼只需從你的屬性中移除setter即可,這一切都很好。

Danny