Разъяснение по C # ООП

1

Нам было предоставлено задание для создания объектно-ориентированных классов, просто в основном глядя на класс тестера, который работает в основном методе.

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"); просто кажется, что он звонит в университет сразу с места в карьер, без ссылки на объект. Я объявил университет как класс, так как он также имеет методы внутри него, как.createFaculty("Наука") и.numberOfFaculties(). Так это может быть ошибкой? или является ли Университет фактически пространством имен или чем-то другим, у которого есть свои собственные методы?

Во-вторых: в университете есть факультеты, факультет имеет кафедры, и в конечном итоге он доходит до того, что есть студенты и курсы. Как видно из кода, я использовал списки, но мы этого не сделали. Только массивы (да, я знаю, что списки тоже массивы, но говорят, что я хочу придерживаться только массивов). Можно ли использовать массив без объявления предопределенного размера? (Я всегда мог просто установить размер на что-то большое, как 999, но его не очень практично)

  • 0
    Обратите внимание, что я еще ни разу не тестировал код, я застрял с университетской ошибкой, и если она ошибочна, я не хочу продолжать работать с неправильным кодом с самого начала
  • 0
    Faculty scienceFac = University.createFaculty("Science"); может использоваться только если у вас есть public static Faculty createFaculty(string faculty_name)
Теги:
object
arrays
oop

2 ответа

5
Лучший ответ

Конкретные ответы на вопросы:

  1. University.createFaculty() - статический метод. Он вызывал использование имени типа, а не экземпляра.

  2. Чтобы создать экземпляр массива, вы должны указать размер. Но сами переменные объявляются без какой-либо информации о размере.

Я думаю, это касается того, о чем вы конкретно спрашивали. Конечно, в образовательной среде часто бывает лучше проконсультироваться со своим учителем, если они доступны. Это поможет вам получить ответ, который лучше подходит для курса, и то, что учитель хочет, чтобы вы учились, а также помогает учителю понять, где каждый ученик имеет отношение к пониманию уроков и заданий.

  • 0
    Как University.createFaculty() является статическим методом? Это нигде не упоминается в коде.
  • 0
    @DebopamChanda из вопроса ОП: Нам было дано задание для конструирования объектно-ориентированных классов из простого взгляда на класс тестера, который выполняется в методе main.
Показать ещё 6 комментариев
0

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

Надеюсь, что это поможет вам

  • 1
    ИМХО, если вы хотите изменить размер массива, лучше использовать метод Array.Resize()
  • 0
    @PeterDuniho Я предполагаю, что они не используют какую-либо структуру данных, List, Arrays являются классами структуры данных, и я предоставил ему решение для работы с обычными массивами.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню