关于C#OOP的澄清

本文关键字:C#OOP 关于 | 更新日期: 2023-09-27 18:30:01

我们被分配了一项任务,通过基本上查看在主方法中运行的测试程序类来构造面向对象的类。

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

我认为他让代码尽可能地令人困惑,而且它真的越来越令人困惑。我刚开始,我已经被卡住了,但这是我迄今为止所拥有的。

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; }
        }
    }
}

到目前为止,我有两个问题:

第一:这句话:Faculty scienceFac = University.createFaculty("Science");似乎一开始就在调用University,没有对象引用。我宣布大学是一个类,因为它里面似乎也有.createFaculty("Science")和.numberOfFaculties()等方法。所以这可能是一个错误吗?或者大学实际上是一个名称空间或其他有自己方法的东西?

第二:一所大学有学院,一个学院有系,最终它会发展到有学生和课程的地步。正如代码中所示,我使用了列表,但我们还没有深入研究。只有数组(是的,我知道列表也是数组,但我想只使用数组)。是否可以在不声明预定义大小的情况下对数组使用?(我总是可以将大小设置为999之类的大值,但实际上并不实用)

关于C#OOP的澄清

问题的具体答案:

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

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

我认为这解决了你特别询问的问题。当然,在教育环境中,如果有老师的话,最好咨询老师。这有助于你得到一个更适合课程和老师希望你学习的答案,也有助于老师了解每个学生对课程和作业的理解。

1-正如@Peter Duniho所提到的,University.CreateFaculty()是一种静态方法

public class University
{
    public static void CreateFaculty()
    {
        // a static method declared inside a class can be called without creating an instance of the object
    } 
}

2-要调整数组的大小,可以执行以下

int[] data=new int[2];
data[0]=1;
data[2]=2;
data=ResizeData(data,3); // this function will return new array with array with length=5
public int[] ResizeData(int[] data,int number)
{
    int[] newArray=new int[number]();
    for(int i=0;i<data.Length;i++) // copy the data from dataArray to the newArray
       newArray[i]=data[i];
    return newArray;
}

希望这将帮助您