关于C#OOP的澄清

1 c# arrays oop object

我们已经获得了一个用于构建面向对象类的任务,它基本上只是查看在main方法中运行的测试器类.

using System;
using school; 

namespace testschool{

public class Tester {
   static void Main(){ 
    Faculty scienceFac=University.createFaculty("Science");
    Department compSciDept=  scienceFac.openNewDepartment("Computer Science"); 
    Department physicsDept=  scienceFac.openNewDepartment("Physics"); 
    Console.WriteLine(Object.ReferenceEquals(
        scienceFac, physicsDept.Faculty)); //expected to return scienceFac object
    Console.WriteLine(University.numberOfFaculties());

//..... MORE CODE
Run Code Online (Sandbox Code Playgroud)

我认为他使代码尽可能令人困惑,而且它真的让人感到困惑.我刚刚开始,我已经卡住了,但到目前为止,这就是我所拥有的.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace testschool
{
    class University
    {
        List<Faculty> all_faculty = new List<Faculty>();

        public Faculty createFaculty(string faculty_name)
        {
            Faculty new_faculty = new Faculty(faculty_name);
            all_faculty.Add(new_faculty);
            return new_faculty;
        }

        public int numberOfFaculties()
        {
            return all_faculty.Count;
        }
    }

    class Faculty
    {
        string faculty_name;
        List<Department> all_departments = new List<Department>();

        public Faculty(string faculty_name)
        {
            this.faculty_name = faculty_name;
        }

        public Department openNewDepartment(string department_name)
        {
            Department new_department = new Department(department_name, this);
            all_departments.Add(new_department);
            return new_department;
        }


    }

    class Department
    {
        string department_name;
        Faculty parent_faculty;
        public Department(string department_name, Faculty faculty)
        {
            this.department_name = department_name;
            parent_faculty = faculty;
        }

        public Faculty Faculty
        {
            get { return parent_faculty; }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我到目前为止的两个问题是:

第一:这一行:Faculty scienceFac = University.createFaculty("Science");似乎只是在没有对象引用的情况下立即调用大学.我将大学宣布为一个类,因为它似乎也有类似.createFaculty("Science")和.numberOfFaculties()的方法.那可能是个错误吗?或者大学实际上是一个命名空间还是其他有自己方法的东西?

第二:大学有院系,教师有院系,最终到了有学生和课程的地步.如代码所示,我使用了列表,但我们还没有进入.只有数组(是的,我知道列表也是数组,但是说我想坚持使用数组).是否可以在不声明预定义大小的情况下使用数组?(我总是可以将大小设置为像999这样的大小但是它不太实用)

Pet*_*iho 5

问题的具体答案:

  1. University.createFaculty()是一种静态方法.使用类型名称而不是实例调用它.

  2. 要创建数组实例,您必须指定大小.但是声明变量本身没有任何大小信息.

我认为这解决了你特别询问的问题.当然,在教育环境中,如果可以的话,最好咨询老师.这有助于您获得针对课程更好地定制的答案以及教师希望您学习的内容,并帮助教师了解每个学生在理解课程和作业方面的位置.

  • 因为它使用的是一个直接的类名,它与我们看到的代码中的任何地方都没有绑定.静态使用FQN来访问函数.我已经教了C#7年了,我会说这不是C#,而是一些丑陋的Java混合到C#代码中. (2认同)
  • @Damon:我很想把它标记为Java,直到我读到`Console.WriteLine`调用. (2认同)