2017-03-25 9 views
-1

私はどのように正しい文字列を出力するのかわかりません。たとえば、プライベートに "name"を出力したい場合、コンパイラはエラーを表示します:保護レベルのためアクセスできません。適切な方法は、公開私的な "名前"の代わりに "名前"を使用することですか?私はプライベートでアクセスしたいので、エラーを修正する方法がわからないからです。 (資本「N」と)出力専用文字列子

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プロパティはプライベート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

私はあなたのプログラムに2つの構文エラーに気づきました。 1)。あなたは

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

person1.name

person1.Nameに置き換える必要があり、大文字と小文字の区別を忘れてしまいました。 ( person1.nameは私的です)

2)です。 class Personに2つの引数コンストラクタを明示的に定義するのを忘れてしまった。

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

私はコメントとしてこれを追加することになりますが、私はまだコメントを追加するには評判を持っていない:あなたは以下、是非ご覧下さいためさて私は、コードを再書かれています。

スラッシャーが正しいことを伝えたいだけです。あなたがしようとしていることがperson1が構築された後に人々が人名を変更するのを止めることであれば、あなたのプロパティからセッターを取り除くだけで、すべてがうまくいく。

ダニー