Ett problem kvar - Arv
Jag har information om tre olika personer i tre olika klasser och ska med en funktion kunna skriva ut all information om dessa tre personer. Om varje person finns ett antal olika rader med information.
t.ex.
myEmployee.DisplayEmployee(); <-- visar all information om just den personen
vet inte riktigt hur jag ska förklara det på något annat sätt tyvärr
Jag har testat på två olika sätt..
Test ett :
using System;
public class ShowProject : Employee
{public ShowProject() {}
public override void FooMethod() {}
Employee.DisplayEmployee();
//myProject.DisplayProjectname();
//myConsult.DisplayConsult();
//myEmployee.DisplayEmployee();
//myProjectemployee.DisplayPr ojectemployee();
} //avslutar class projekt
ger felmeddelande :
Invalid token '(' in class, struct, or interface member declaration
vilket då syftar på raden Employee.DisplayEmployee();
Test 2:
using System;
public class ShowProject : Employee
{public ShowProject() {}
public override void FooMethod() {}
Employee.ToString();
//myProject.DisplayProjectname();
//myConsult.DisplayConsult();
//myEmployee.DisplayEmployee();
//myProjectemployee.DisplayPr ojectemployee();
}
ger felmeddelandet:
Invalid token '(' in class, struct, or interface member declaration
vilket syftar på raden Employee.ToString();
Tacksam för svar
/Maria
Svara
Sv: Två problem: ToString och Arv
<b>Men jag får inte de olika koderna att fungera</b> är nog inte det felmeddelande du får och innehåller inte mycket beskrivning om vad som gick fel, men i alla fall:
1 2 3 | public override string ToString() { return "Hello World" ; } |
återigen, lär dej beskriva problemen bättre än "det funkar inte".
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class Parent { // ... public Parent() {} public virtual void FooMethod() {} } public class Child : Parent { public Child() {} public override void FooMethod() {} } |
Svara
Sv:Två problem: ToString och Arv
Ber om ursäkt för de dåliga beskrivningarna, ska bättra mig, men eftersom jag hade väldigt många olika versioner var det svårt att beskriva på ett bra sätt.
Nu har jag testat denna kod:
public override string ToString()
{
return "{0};{0};{0};{0}"; employeeName; employeePay; employeeWorktime; employeeOvertimecost;
}
och får då dessa error angående employeeName, employeePay, employeeWorktime och employeeOvertimecost.
Only assignment, call, increment, decrement, and new object expressions can be used as a statement
Svara
Sv: Två problem: ToString och Arv
ahaa från den koden är det helt klart vad som är fel, nämligen följande rad:
1 | return "{0};{0};{0};{0}" ; employeeName; employeePay; employeeWorktime; |
I c# kan du endast ha ett returvärde, och det du *antagligen* försöker göra är att returnera en formaterad sträng och då bör du använda dej av string.Format
1 | return string .Format( "{0},{1},{2},{3}" , employeeName, employeePay, employeeWorktime); |
sen får du fila på formatsträngen så att du får formatet du vill ha...
Svara
Sv:Två problem: ToString och Arv
Angående problem 2.
Nu har jag testat på två olika sätt..
Test ett :
using System;
public class ShowProject : Employee
{public ShowProject() {}
public override void FooMethod() {}
Employee.DisplayEmployee();
//myProject.DisplayProjectname();
//myConsult.DisplayConsult();
//myEmployee.DisplayEmployee();
//myProjectemployee.DisplayProjectemployee();
} //avslutar class projekt
ger felmeddelande :
Invalid token '(' in class, struct, or interface member declaration
vilket då syftar på raden Employee.DisplayEmployee();
Test 2:
using System;
public class ShowProject : Employee
{public ShowProject() {}
public override void FooMethod() {}
Employee.ToString();
//myProject.DisplayProjectname();
//myConsult.DisplayConsult();
//myEmployee.DisplayEmployee();
//myProjectemployee.DisplayProjectemployee();
}
ger felmeddelandet:
Invalid token '(' in class, struct, or interface member declaration
vilket syftar på raden Employee.ToString();
Svara
Sv: Två problem: ToString och Arv
felmeddelanden indikerar att du försöker skriva kod utanför en metod. Men vad är det du försöker åstadkomma? Din arvstruktur verkar något märklig...
Svara
Sv:Två problem: ToString och Arv
Jag har information om tre olika personer i tre olika klasser och ska med en funktion kunna skriva ut all information om dessa tre personer. Om varje person finns ett antal olika rader med information.
t.ex.
myEmployee.DisplayEmployee(); <-- visar all information om just den personen
vet inte riktigt hur jag ska förklara det på något annat sätt tyvärr
Svara
Sv: Två problem: ToString och Arv
Raden
Employee.ToString();
Forsoker kora en statisk metod som heter ToString().
Vilken Employee ar det du forsoker skriva ut? Du maste kora din ToString()-metod pa ett instansierat objekt (tex myEmployee).
Var ar den specifika Employee du forsoker skriva ut info om?
Svara
Sv:Två problem: ToString och Arv
Den specifika Employee finns egentligen under myEmployee som är ett nytt objekt skapat via klassen Employee
Svara
Sv: Två problem: ToString och Arv
Jag kan ha missforstatt det hela, men har kommer min mycket forenklade tolkning av hur det borde se ut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | class BaseEmployee { protected string name; protected decimal pay; protected decimal worktime; public BaseEmployee( string name, decimal pay, decimal worktime) { this .name = name; this .pay = pay; this .worktime = worktime; } public virtual string ToString() { return name; } } class Employee:BaseEmployee { public Employee( string name, decimal pay, decimal worktime): base (name, pay, worktime) {} public override string ToString() { return string .Format( "{0}, {1}, {2}" , name, pay.ToString( "#######.00" ), worktime.ToString()); } } class Printer { public static void PrintEmployee(Employee emp) { Console.WriteLine(emp.ToString()); } public static void PrintEmployees(List<Employee> list) { foreach (Employee emp in list) { Console.WriteLine(emp.ToString()); } } } |
Sen kallar du bara de statiska metoderna i Printer-klassen och skickar in de Employees du vill skriva ut.
Har inte riktigt forstatt varfor du vill anvanda arv..
mvh
Magnus
Svara