Ez a feladat a metódusparaméterek néhány részletével és azok C#-beli használatával foglalkozik.
A paraméterek információt közvetítenek a hívó metódustól a hívott metódushoz.
A paraméterek viselkedése módosítható olyan módosítók használatával, mint a ref és az out.
Az out módosítóval ellátott paraméter egy értéket közvetít vissza a hívott metódustól a hívóhoz. A paraméter inicializálás nélkül átadható a hívott metódusnak, és a hívott metódusban mindenképpen úgy kezelik, mintha belépéskor nem inicializálták volna. A paramétermódosítók viselkedését és szabályait a legkönnyebben példákon keresztül (lásd alább) és a fordító üzenetein keresztül értheted meg.
void Foo(out int val)
{
val = 42;
}
void Bar(int val)
{
val = 42;
}
int importantValue = 1729;
Foo(out importantValue);
var result = importantValue == 42;
// => true
importantValue = 1729;
Bar(importantValue);
result = importantValue == 1729;
// => true
Az out paramétereknek a hívott metóduson belül értéket kell kapniuk.
A ref módosítóval ellátott paraméter értéket ad át a hívott metódusnak. Amikor a metódus visszatér, a hívó a paraméterben megtalálja a hívott metódus által végrehajtott összes módosítást.
void Foo(ref int val)
{
val *= 7;
}
int importantValue = 6;
Foo(ref importantValue);
return importantValue;
// => 42
ref paramétereknek változóknak kell lenniük, mert a hívott metódus közvetlenül azon a paraméteren fog működni, ahogyan a hívó látja.out és a ref módosítóra egyaránt szükség van a hívott metódus szignatúrájában és a hívás helyén is.A távirányítós autó projekt, amelyet a classes feladatban indítottál el, jól sikerült (gratulálunk!), és néhány nemrégiben kötött szponzorációs megállapodásnak köszönhetően van pénz a költségvetésben fejlesztésekre.
A költségvetés egy részét telemetria biztosítására fordítják.
Hogy a szponzorok kedvében járjanak, egy panelt szereltek fel az autóra, amely a szponzorok nevét jeleníti meg, miközben az autó körbehalad a pályán.
Észre fogod venni, hogy ezeknek a divatos új technológiáknak a bevezetése drasztikusan csökkentette az autó akkumulátorának élettartamát.
Valósítsd meg a SetSponsors() metódust, amely egy vagy több szponzornevet fogad, és eltárolja azokat az autón.
Ne feledd, hogy a SetSponsors() metódus argumentuma garantáltan nem null.
Valósítsd meg a DisplaySponsor() metódust, amely megjeleníti a kiválasztott szponzort. Az elsőként átadott szponzor sponsorNum értéke 0, a másodiké 1, és így tovább.
var car = RemoteControlCar.Buy();
car.SetSponsors("Exercism", "Walker Industries", "Acme Co.");
var sp2 = car.DisplaySponsor(sponsorNum: 1);
// => "Walker Industries"
Valósítsd meg a RemoteControlCar.GetTelemetryData() metódust.
A GetTelemetryData() metódus tegye elérhetővé az akkumulátorszázalékot és a méterben megtett távolságot out paramétereken keresztül.
A GetTelemetryData() metódus false értéket adjon vissza, ha a serialNum argumentum kisebb a korábban kapott értéknél. (Valami probléma merült fel a több telemetriai csomóponttal kapcsolatban.) Ebben az esetben a serialNum a legmagasabb korábbi serialNum értékre áll be, az akkumulátorszázalék és a megtett méterek pedig -1-re állnak. Sikeres hívás esetén a serialNum változatlan marad.
var car = RemoteControlCar.Buy();
car.Drive();
car.Drive();
int serialNum = 4;
car.GetTelemetryData(ref serialNum, out int batteryPercentage, out int distanceDrivenInMeters);
// => true, 4L, 80, 4
serialNum = 1;
car.GetTelemetryData(ref serialNum, out batteryPercentage, out distanceDrivenInMeters);
// => false, 4L, -1, -1
Valósítsd meg a TelemetryClient.GetBatteryUsagePerMeter() metódust.
Ez meghívja a RemoteControlCar.GetTelemetryData() metódust. Ha a GetTelemetryData() false értéket ad vissza, vagy az autót nem vezették, akkor ennek a rutinnak „no data” értéket kell visszaadnia. Ha a GetTelemetryData() true értéket ad vissza, akkor a következő formájú üzenetet kell visszaadni: „usage-per-meter=BATTERY-USAGE-PER-METER”. A számítás: (100 - az aktuális akkumulátorszázalék) osztva az eddig megtett távolsággal méterben.
var car = RemoteControlCar.Buy();
car.Drive();
car.Drive();
var tc = new TelemetryClient(car);
int serialNum = 4;
tc.GetBatteryUsagePerMeter(serialNum);
// => "usage-per-meter=5"
serialNum = 1;
tc.GetBatteryUsagePerMeter(serialNum);
// => "no data"
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) C# nyelvet 62 fogalom178 feladat segítségével, valódi emberi mentorálással, mindez ingyen.