关于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之类的大值,但实际上并不实用)
问题的具体答案:
-
University.createFaculty()
是一种静态方法。它是使用类型名称而不是实例来调用的。 -
要创建数组实例,必须指定大小。但是变量本身被声明为而没有任何大小信息。
我认为这解决了你特别询问的问题。当然,在教育环境中,如果有老师的话,最好咨询老师。这有助于你得到一个更适合课程和老师希望你学习的答案,也有助于老师了解每个学生对课程和作业的理解。
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;
}
希望这将帮助您