2012-04-10 19 views
0

Ich muss eine private Referenz zu einem Unit-Objekt _Unit hinzufügen. Beigefügt sind beide Klassen (Unit und Result).Eine private Referenz zu einem Objekt hinzufügen

Ich verstehe, ich brauche den Code unten haben, jedoch kommt es zu Fehlern (siehe unten):

// 14. create new class 
class Result : Unit 

und die unten erzeugt den Fehler, dass base() erfordert zwei Konstruktoren:

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

In meiner Unit-Klasse gibt es zwei private Strings _Code und _Name. Bitte fragen Sie nach, ob Sie weitere Klassencodes oder die Aufgabenfrage benötigen.

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

Darüber hinaus kann ein anderer Fehler erhalte ich, dass ich einfach nicht voll verstehen, die unter Methode hat statische sein, ich habe recherchiert, dass auch die Attribute und Eigenschaften von _Gradestatischen löst machen der Fehler zeigt auf jedem einzelnen _Grade, aber es zeigt immer noch auf dem ersten?

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

public static bool ValidateGrade(string grade) 

Antwort

2

Für Ihre erste Frage:

Ihre Klasse Result inherites von Unit und Konstruktor von Result ruft die eine der Basis Klasse. In Unit ist jedoch nur ein Konstruktor definiert, der zwei Argumente benötigt (code und name). Daher muss Ihr Aufruf an base im Konstruktor Result zwei Parameter haben.

Aber wahrscheinlich möchten Sie nicht von Unit erben, aber fügen Sie eine private Referenz hinzu. Es würden Sie so etwas wie

class Result { 

    private Unit _Unit; 

    ... 

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

Ihr zweiter Fehler haben: Eine statische Methode nur statische Felder und Eigenschaften zugreifen können, so aus einer statischen Methode, die Sie nicht Ihre Instanzvariablen zugreifen können. Sie wollen einfach nur überprüfen, ob die gelieferten grade in Ihrem Bereich ist, so don nur t refer to the instance variable _Grade`:

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

Danke, das ist perfekt. Ich entschied mich für die Antwort von Bram W bezüglich des ersten Problems. Ihre Eingabe für das zweite Problem hat jedoch den Fehler behoben. – Taz

+0

Ich verstand Zuordnung 15 (// 15.Fügen Sie einen privaten Verweis zu einem Unit-Objekt hinzu) ein wenig mehr wie das Verbergen (Boxen), aber nicht von ihm erben, aber ok :-) – Matten

1

Sie Einheit Klassenkonstruktors erwartet zwei Argumente.

Wenn Base-Aufruf im Ergebnis Klasse Sie es mit zwei Argumenten aufrufen müssen

1

Zunächst einmal in Ihrem Ergebnis Klasse, hat das _Unit Feld vom Typ Einheit sein, nicht String. Der Fehler des Basiskonstruktors, den Sie erhalten, liegt darin, dass Sie im Konstruktor Ihrer Unit-Klasse 2 Parameter angegeben haben. Entweder müssen Sie der Unit-Klasse einen weiteren Konstruktor hinzufügen, oder Sie ändern den Konstruktor der Result-Klasse in beispielsweise

+0

Danke für die Erwähnung des Konstruktors. Dies ist der Typ, den wir gelernt haben, also benutzt es am besten. – Taz

Verwandte Themen