2017-08-12 3 views
1

最近まで、私はmain関数内のすべての要素を初期化していましたが、これはかなり醜いです。だから私は先に進んで、私に初期化を書かせるのではなく、自分の名前(Create.ClassRoom())だけで自分自身を説明する方法があるだろうと思った。だから私は先に行って、それを行うための方法でこのクラスを作っ:メソッドを使用して初期化する

class Create 
{ 
    public static void ClassRoom() 
    { 
     Student Henry = new Student("Henry", 20); 
     Student Jeff = new Student("Jeff", 18); 
     Student Jessica = new Student("Jessica", 22); 

     Teacher MrLopez = new Teacher("Lopez", "Math", 37); 
    } 

主な外観は非常に良くなるだろうどの:

class Program 
{ 
    static void Main(string[] args) 
    { 
     Create.ClassRoom(); 

     Console.WriteLine(Henry.age); 
    } 
} 

しかし、ヘンリーは現在のコンテキスト内に存在しないと言います。今私はこれが範囲と関係していることを理解していますが、私はそれを考えたり解決したりすることはできません。私のアイデアはやり遂げられないのですか、何か不足していますか?私はCreate.ClassRoom()をした後にそれがそうであるようにしたいと思います。それは私がそこで初期化されているものと相互作用することができます。

+0

をどこの教室」の関数定義ですか? – kotAPI

+0

おっと!名前を変更するのを忘れてしまいました。私は今それを編集します。 – Yummy275

+0

まずクラスのインスタンスを作成したいと考えています。 'ClassRoom myClass = new ClassRoom()'のようなもので、myClass.getNumberOfStudents()のようなものを言ってメソッドにアクセスします。 – kotAPI

答えて

2

はい、そうです。それは範囲と関係しています。初期化された変数は、CreateClassRoom()メソッドの外部ではアクセスできません。クラスルームのインスタンスを呼び出しメソッドに戻す必要があります。次のように

は、あなたのクラスをリファクタリング:

class ClassRoom 
{ 
    public List<Student> Students { get; private set; } 
    public List<Teacher> Teachers { get; private set; } 

    public ClassRoom() 
    { 
     this.Students = new List<Student>(); 
     this.Teachers = new List<Teacher>(); 
    } 
} 

class Create 
{ 
    public static ClassRoom ClassRoom() 
    { 
     ClassRoom classRoom = new ClassRoom(); 
     classRoom.Students.Add(new Student("Henry", 20)); 
     classRoom.Students.Add(new Student("Jeff", 18)); 
     classRoom.Students.Add(new Student("Jessica", 22)); 

     classRoom.Teachers.Add(new Teacher("Lopez", "Math", 37)); 

     return classRoom; 
    } 
} 

をCreate.ClassRoom()メソッドを使用すると、クラスで生徒と教師にアクセスすることができますどの使用して、教室でのオブジェクトのインスタンスを返します。メイン(から

)以下のように、あなたがプロパティにアクセスできます。

static void Main(string[] args) 
    { 
     var classRoom = Create.ClassRoom(); 

     Console.WriteLine("Students: "); 
     foreach (var student in classRoom.Students) 
     { 
      Console.WriteLine("Name: {0}; Age: {1}", student.Name, student.Age); 
     } 

     Console.WriteLine("Teachers: "); 
     foreach (var teacher in classRoom.Teachers) 
     { 
      Console.WriteLine("Name: {0}; Subject: {1}", teacher.Name, teacher.Subject); 
     } 
    } 
0

Henryは、ClassRoom()関数のスコープ内にあるため、main()でアクセスできません。 Studentオブジェクトを返すようにしたり、アクセスしたい変数のゲッターとセッターを持つクラスを作成したりする必要があります。

関連する問題