Implementering og tests
Implementér Rectangle, Circle og Triangle, tilføj grundlæggende inputkontroller, og skriv små ad hoc-tests uden et framework.
Implementering og tests er en gratis C# Academy-lektion på CoddyKit. Dette er lektion 2 af 3. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i C# Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C# Academy-kurset indeholder 3 lektioner i alt.
Implementeringsplan
Mål: Implementér former, og verificér dem.
- Implementér Rectangle, Circle og Triangle
- Beskyt mod ugyldige inddata
- Tilføj en lille Assert-hjælper
- Kør hurtige kontroller i Main
Rectangle og Circle
Tilføj enkle valideringer i konstruktører, så dimensioner er positive. Hold formlerne korte og tydelige.
using System;
public interface IShape
{
double Area();
double Perimeter();
}
public sealed class Rectangle : IShape
{
private readonly double _w, _h;
public Rectangle(double w, double h)
{
if (w <= 0 || h <= 0) throw new ArgumentOutOfRangeException("w/h must be > 0");
_w = w; _h = h;
}
public double Area() { return _w * _h; }
public double Perimeter() { return 2 * (_w + _h); }
}
public sealed class Circle : IShape
{
private readonly double _r;
public Circle(double r)
{
if (r <= 0) throw new ArgumentOutOfRangeException("r must be > 0");
_r = r;
}
public double Area() { return 3.14159 * _r * _r; }
public double Perimeter() { return 2 * 3.14159 * _r; }
}
public class Program
{
public static void Main(string[] args)
{
IShape a = new Rectangle(3, 4);
IShape b = new Circle(2);
Console.WriteLine("Rect A=" + a.Area() + " P=" + a.Perimeter());
Console.WriteLine("Circ A=" + b.Area() + " P=" + b.Perimeter());
}
}
Triangle med validering
Validér siderne (trekantuligheden). Brug en velkendt formel, og hold tallene læselige.
using System;
public interface IShape
{
double Area();
double Perimeter();
}
public sealed class Triangle : IShape
{
private readonly double _a, _b, _c;
public Triangle(double a, double b, double c)
{
if (a <= 0 || b <= 0 || c <= 0) throw new ArgumentOutOfRangeException("sides must be > 0");
// triangle inequality: each side < sum of other two
if (a >= b + c || b >= a + c || c >= a + b) throw new ArgumentException("invalid triangle");
_a = a; _b = b; _c = c;
}
public double Perimeter() { return _a + _b + _c; }
// Herons formula for area
public double Area()
{
double s = (_a + _b + _c) / 2.0;
double value = s * (s - _a) * (s - _b) * (s - _c);
return Math.Sqrt(value);
}
}
public class Program
{
public static void Main(string[] args)
{
IShape t = new Triangle(3, 4, 5);
Console.WriteLine("Tri A=" + t.Area() + " P=" + t.Perimeter());
}
}
Ad hoc Assert-hjælper
Opret en lille Assert-klasse. Sammenlign den forventede med den faktiske værdi ved hjælp af en tolerance for double-værdier.
using System;
public static class Assert
{
// Approx compare for doubles (tolerance)
public static void AreClose(double expected, double actual, double eps, string msg)
{
if (Math.Abs(expected - actual) > eps)
{
throw new Exception("Assert failed: " + msg + " expected=" + expected + " actual=" + actual);
}
Console.WriteLine("OK: " + msg);
}
}
public interface IShape
{
double Area();
double Perimeter();
}
public sealed class Rectangle : IShape
{
private readonly double _w, _h;
public Rectangle(double w, double h) { if (w <= 0 || h <= 0) throw new ArgumentOutOfRangeException(); _w = w; _h = h; }
public double Area() { return _w * _h; }
public double Perimeter() { return 2 * (_w + _h); }
}
public class Program
{
public static void Main(string[] args)
{
Rectangle r = new Rectangle(3, 4);
Assert.AreClose(12.0, r.Area(), 0.0001, "rectangle area");
Assert.AreClose(14.0, r.Perimeter(), 0.0001, "rectangle perimeter");
}
}
Kør hurtige test
Saml nogle få test i Main. Hold forventningerne enkle og læselige.
using System;
public static class Assert
{
public static void AreClose(double expected, double actual, double eps, string msg)
{
if (Math.Abs(expected - actual) > eps)
throw new Exception("Assert failed: " + msg + " expected=" + expected + " actual=" + actual);
Console.WriteLine("OK: " + msg);
}
}
public interface IShape
{
double Area();
double Perimeter();
}
public sealed class Circle : IShape
{
private readonly double _r;
public Circle(double r) { if (r <= 0) throw new ArgumentOutOfRangeException(); _r = r; }
public double Area() { return 3.14159 * _r * _r; }
public double Perimeter() { return 2 * 3.14159 * _r; }
}
public sealed class Triangle : IShape
{
private readonly double _a, _b, _c;
public Triangle(double a, double b, double c)
{
if (a <= 0 || b <= 0 || c <= 0) throw new ArgumentOutOfRangeException();
if (a >= b + c || b >= a + c || c >= a + b) throw new ArgumentException("invalid triangle");
_a = a; _b = b; _c = c;
}
public double Perimeter() { return _a + _b + _c; }
public double Area()
{
double s = (_a + _b + _c) / 2.0;
return Math.Sqrt(s * (s - _a) * (s - _b) * (s - _c));
}
}
public class Program
{
public static void Main(string[] args)
{
double eps = 0.001;
Circle c = new Circle(2);
Assert.AreClose(12.56636, c.Area(), eps, "circle area r=2");
Assert.AreClose(12.56636, c.Perimeter(), eps, "circle peri r=2");
Triangle t = new Triangle(3, 4, 5);
Assert.AreClose(12.0, t.Perimeter(), eps, "triangle perimeter 3-4-5");
Assert.AreClose(6.0, t.Area(), eps, "triangle area 3-4-5");
}
}
Tips til implementering
Tjekliste:
- Validér inddata i konstruktører.
- Hold formlerne korte, og brug lokale konstanter til pi.
- Opret en lille Assert til ad hoc-test.
- Test både Area og Perimeter for hver form.
Idé til ad hoc-test
Opsummering
Opsummering: Implementér former med tydelig validering, og verificér dem derefter med en minimal Assert-hjælper i Main. Hold testene små og deterministiske.
Lær C# med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 93
- Lektioner
- 346
Ofte stillede spørgsmål
Er lektionen “Implementering og tests” gratis?
Ja — hele teksten til “Implementering og tests” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af C# Academy-kurset, skal du opgradere til CoddyKit PRO. C# Academy-kurset indeholder 3 lektioner i alt.
Hvad lærer jeg i “Implementering og tests”?
Implementér Rectangle, Circle og Triangle, tilføj grundlæggende inputkontroller, og skriv små ad hoc-tests uden et framework. Du øver dig i C# Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på C# Academy?
Der kræves ingen tidligere erfaring. C# Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 3.
Hvor lang tid tager lektionen “Implementering og tests”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne C# Academy-lektion?
Ja. Alle C# Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Design (interfaces og inheritance)
- Implementering og tests
- Polymorf adfærd