2017-08-12 76 views
1

因此,直到最近我一直在初始化主函数中的所有东西,但这使得它(imo)非常难看。所以我继续前进,并认为不是让我写出初始化,我只是有一个方法来为我做,这会解释它自己的名字(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()方法返回教室对象的实例,使用它,你将能够访问学生和教师在课堂上。

从main(),你可以按如下方式访问属性:

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

亨利不能由main()访问,因为它在函数ClassRoom()的范围内。你需要让它返回一个Student对象,或者更好,创建一个有你想访问的变量的getter和setter的类。

相关问题