2012-04-10 4 views
0

Мне нужно добавить личную ссылку на объект Unit _Unit. Прикреплены оба класса (Unit и Result).Добавить персональную ссылку на объект

Я понимаю, что нужно иметь код, приведенный ниже, однако это приводит к ошибкам (перечислены ниже):

// 14. create new class 
class Result : Unit 

и ниже создает ошибку, base() требует два конструктора:

// 17. Create constructor for the class 
public Result(string grade, Unit _Unit) : base(_Unit) 

В моем классе единицы есть две частные строки _Code и _Name. Пожалуйста, спросите, нужны ли вам какие-либо другие коды классов, заданные или заданные.

namespace SIT232_Assignment1 
{ 
    // 14. create new class 
    class Result 
    { 
    // 15. Add a private reference to a Unit objectand a private string attributes. 
    private string _Grade, _Unit; 

    // 16. Encapsulate the above attributes with public read-only properties 
    public string Grade 
    { 
     get { return _Grade; }    
    } 

    // 17. Create constructor for the class 
    public Result(string grade, Unit _Unit) 
    {    
     _Grade = grade;    
    } 

    // 18. create a public read-only property of type bool 
    public bool Passed (string grade) 
    { 
     bool result = true; 
     if (_Grade == "N") 
      result = false; 
     return result; 
    } 

    // 19. Create a public static methods 
    public static bool ValidateGrade(string grade) 
    { 
     bool result = false; 
     if (_Grade == "N" || _Grade == "P" || _Grade == "C" || _Grade == "D" || _Grade =="HD") 
      result = true; 
     return result;    
    } 

    // 20. Define a ToString method 
    public override string ToString() 
    { 
     return String.Format("{0}\t{1}", _Grade); 
    } 
} 

namespace SIT232_Assignment1 
{ 
    // 8. Create new class 
    class Unit 
    { 
    // 9. Add private string attributes for the unit code and unit name 
    private string _Code, _Name; 

    // 10. Encapsulate the above attributes with public read-only properties. 
    public string Code 
    { 
     get { return _Code; }    
    }     
    public string Name 
    { 
     get { return _Name; }    
    }  

    // 11. Create constructor with two string parameters 
    public Unit(string code, string name) 
    { 
     _Code = code; 
     _Name = name; 
    } 

    // 27. create a private list<> 
    private List<Student> _EnrolledStudents = new List<Student>(); 

    // 28. Encapsulate the above list with read-only 
    public ReadOnlyCollection<Student> EnrolledStudents 
    { 
     get { return _EnrolledStudents.AsReadOnly(); } 
    } 

    // 29. Create a method that accecpts a single parameter 
    public void RecordEnrollment(Student student) 
    { 
     _EnrolledStudents.Add(student); 
    } 

    // 30. Create a method that accecpts a single parameter 
    public void RemoveEnrollment(Student student) 
    { 
     _EnrolledStudents.Remove(student); 
    } 

    // 12. Define a ToString method 
    public override string ToString() 
    { 
     return String.Format("{0} {1}", _Code, _Name); 
    } 
} 

Кроме того, одна другая ошибка, я получаю, что я просто не могу понять, полное это ниже метод должен быть статический, я исследовал, что также делает атрибуты и свойства _Gradeстатических Решает ошибка, отображаемая на каждом отдельном _Grade, однако она по-прежнему отображается на первом?

if (_Grade == "N" || _Grade == "P" || _Grade == "C" || _Grade == "D" || _Grade =="HD") 

public static bool ValidateGrade(string grade) 

ответ

2

Для вашего первого вопроса:

Ваш класс Result inherites из Unit и ваш конструктор Result называет одну из базы класс. Однако в Unit существует только один конструктор, которому требуется два аргумента (code и name), поэтому ваш вызов base в конструкторе Result должен иметь два параметра.

Но вы, вероятно, не хотите унаследовать от Unit, но добавьте личную ссылку на него. Там вы бы что-то вроде

class Result { 

    private Unit _Unit; 

    ... 

    public Result(..., Unit _Unit) 
    { 
     this._Unit = _Unit; 
     ... 
    } 
} 

Вашей второй ошибки: Статический метод может получить доступ только к статическим полям и свойств, поэтому из статического метода вы не можете получить доступ к переменному экземпляру. Вы просто хотите, чтобы убедиться, что входящий в комплект поставки grade находится в вашем диапазоне, так что просто не t refer to the instance variable _Grade`:

public static bool ValidateGrade(string grade) 
{ 
    return (grade == "N" || grade == "P" ...) 
} 
+0

Спасибо, это прекрасно. Я решил использовать ответ Брэма W в отношении первой проблемы. Однако ваш вход во вторую проблему устранил ошибку. – Taz

+0

Я понял назначение 15 (// 15.Добавьте личную ссылку на объект Unit) немного больше похож на скрытие (бокс), но не наследующее от него, но хорошо :-) – Matten

1

Вы Unit конструктор класса принимает два аргумента.

При вызове Base в Результат класса вы должны вызывать его с двумя аргументами

1

Прежде всего, в своем классе результат, поле _Unit должен иметь тип блока, а не строки. Ошибка базового конструктора в том, что вы получили два параметра в конструкторе вашего класса Unit. Либо вам придется добавить другой конструктор в класс Unit, либо изменить конструктор класса Result на, например,

public Result(string grade, Unit _Unit) : base(_Unit.Code, _Unit.Name) 
+0

Спасибо за упоминание о конструкторе. Это тот тип, которым нас учат, поэтому лучше всего используйте это. – Taz

Смежные вопросы