2013-04-03 4 views
0

Я пытаюсь получить список модулей для ученика и добавить их в свойство в другом классе, чтобы отобразить их. У меня есть цель: когда я создаю экземпляр человека, а их программа имеет определенное имя, он будет извлекать модули для этой программы.C# ссылку два свойства вместе?

Это мой метод в моем классе Program, где я пытаюсь получить модули из метода ListOfModules в классе Modules.

public List<Modules> ModuleList 
    { 
     get 
     { 
      Modules m = new Modules(); 

      if (m.ListOfModules == null) 
      { 
       return null; 
      } 
      else 
      { 
       return m.ListOfModules; 
      } 
     } 
    } 

Это метод ListOfModules в классе модулей.

internal List<Modules> ListOfModules 
    { 
     get 
     { 
      if (_modules == null) 
      { 
       return _modules; 
      } 
      else 
      { 
       return _modules; 
      } 
     } 
    } 

и вот пример того, как я добавляю модули в список модулей.

class CGP : Programmes 
{ 
    List<Modules> modules; 
    public CGP() :base("CGP") //CGP is the name of the programme 
    { 
     modules = new List<Modules>(); 
     modules.Add(new Modules("example 1")); 
     modules.Add(new Modules("example 2")); 
    } 
} 

Так как я могу идти о получении метода ModuleList в классе Program, чтобы получить этот список модулей из метода ListOfModules в классе модулей? Я знаю, что эти модули добавляются в метод ListOfModules, но я не могу понять, как связать его с ModuleList, чтобы я мог распечатать этот список.

Буду признателен за любую помощь или поддержку, поскольку я потратил бесчисленное количество часов, пытаясь понять это. Извините за то, что ты похож на любителя.

+1

Возможно, вам стоит посмотреть коллекцию. В одной программе много модулей.Затем вы можете использовать имя программы в качестве ключа –

ответ

1

корень вашей проблемы, кажется, ваш ModuleList в вашем базовом классе. Я также не понимаю, почему у вас есть 2 уровня списков, которые кажутся точно такой же реализацией.

class Programme 
{ 
    private List<Module> _modules = new List<Module>(); 

    public List<Module> Modules { get { return _moduleList; } } 
} 

class CGP : Programme 
{ 
    public CGP() :base("CGP") 
    { 
     Modules.Add(new Module("example 1")); 
     Modules.Add(new Module("example 2")); 
    } 
} 

Это особенно кажется глупым:

internal List<Modules> ListOfModules 
{ 
    get 
    { 
     if (_modules == null) 
     { 
      return _modules; 
     } 
     else 
     { 
      return _modules; 
     } 
    } 
} 

Вы возвращающегося то же самое в любом случае, так что проверка не требуется. Это по существу то же самое, что и в этом:

internal List<Modules> ListOfModules { get { return _modules; } } 
+0

Большое спасибо, я смог наконец заставить его работать после того, как вы немного открыли глаза, и да, я знаю, что это кажется очень глупым, я этого не замечал. Я пытался использовать всевозможные случайные вещи, чтобы заставить его работать. – Kash

0

Нет прямого способа связать эти вещи так, как вы описываете.

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

0

Похоже, ваша проблема заключается в том, что модули List объявлены в подклассе CGP, поэтому свойство ModuleList в суперклассе Programs не может получить к нему доступ. Если вы хотите, чтобы свойство в классе «Программы» могло возвращать модули, которые вы добавляете в конструкторе CGP, их необходимо добавить к свойству класса «Программы», возможно, объявлен как защищенный, чтобы доступ к только подклассам Это.

Несколько других вещей, которые кажутся нечетными: Почему ваш модуль ModuleList getter создает новый объект Modules и затем возвращает его свойство? Создает ли конструктор для модулей что-то, чтобы создать данные, лежащие в основе этого свойства ListOfModules, или получить откуда-нибудь?

Почему свойство ListOfModules проверяет, является ли _modules значением null, а затем возвращает его, является ли оно нулевым? Я бы пропустить это и свойство _modules и сделать:

internal List<Modules> ListOfModules { get; private set; } 
Смежные вопросы