Polymorfiset toimintatavat
Käyttäkää rajapintapohjaista polymorfismia: käsitelkää erilaisia muotoja yhdenmukaisesti, lisätkää uusia muotoja muuttamatta kutsujia ja koostakaa pieniä toimintatapoja.
Polymorfiset toimintatavat on ilmainen C# Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/3. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu C# Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C# Academy-kurssilla on yhteensä 3 oppituntia.
Polymorfismin yleiskatsaus
Tavoite: Käyttäkää polymorfismia kutsujien pitämiseen yksinkertaisina.
- Työskennelkää kaikkialla IShape-rajapinnan kanssa
- Yhdistäkää monia muotoja samaan listaan
- Lisätkää uusia muotoja muuttamatta olemassa olevaa koodia
- Koostakaa pieniä toimintoja, kuten muotoilua ja suodatusta
Yksi rajapinta kaikille muodoille
Ottakaa apumetodeissa vastaan IShape-rajapinta. Ajonaikainen kutsunvälitys valitsee oikean toteutuksen.
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) { _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) { _r = r; }
public double Area() { return 3.14159 * _r * _r; }
public double Perimeter() { return 2 * 3.14159 * _r; }
}
public class Program
{
// One function works for any IShape (dynamic dispatch on overrides)
static void PrintSummary(IShape s)
{
Console.WriteLine("A=" + s.Area() + " P=" + s.Perimeter());
}
public static void Main(string[] args)
{
PrintSummary(new Rectangle(3, 4));
PrintSummary(new Circle(2));
}
}
Sekalaisen listan käsittely
Tallentakaa useita muotoja kohteeseen List<IShape>. Iterointi pysyy yksinkertaisena, vaikka toiminta vaihtelee ilmentymän mukaan.
using System;
using System.Collections.Generic;
public interface IShape { double Area(); double Perimeter(); }
public sealed class Rectangle : IShape
{
private readonly double _w, _h;
public Rectangle(double w, double h) { _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) { _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)
{
List<IShape> shapes = new List<IShape>();
shapes.Add(new Rectangle(2, 5));
shapes.Add(new Circle(1.5));
shapes.Add(new Rectangle(1, 1));
foreach (IShape s in shapes)
{
Console.WriteLine("A=" + s.Area());
}
}
}
Avoin laajennettavuus
Polymorfismi tukee avointa laajennettavuutta: uudet muodot voidaan ottaa käyttöön muokkaamatta olemassa olevia kutsujia.
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) { _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
{
// Existing helper still works; no changes needed
static void Show(IShape s) { Console.WriteLine("A=" + s.Area() + " P=" + s.Perimeter()); }
public static void Main(string[] args)
{
Show(new Triangle(3, 4, 5)); // new type plugs in
}
}
Käyttäytymisen koostaminen (strategy)
Koostakaa pieniä toimintoja pienten rajapintojen, kuten formatter-rajapinnan, avulla. Vaihtakaa strategioita muuttamatta muotoa.
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) { _w = w; _h = h; }
public double Area() { return _w * _h; }
public double Perimeter() { return 2 * (_w + _h); }
}
// Small strategy interface for formatting
public interface IShapeFormatter
{
string Format(IShape s);
}
public sealed class SimpleFormatter : IShapeFormatter
{
public string Format(IShape s) { return "A=" + s.Area() + " P=" + s.Perimeter(); }
}
public class Program
{
static void Print(IShape s, IShapeFormatter f)
{
Console.WriteLine(f.Format(s));
}
public static void Main(string[] args)
{
Print(new Rectangle(3, 2), new SimpleFormatter());
}
}
Polymorfismivinkkejä
Vinkkejä:
- Välittäkää IShape apumetodeille ja välttäkää tyyppitarkistuksia.
- Pitäkää apumetodit pieninä ja mahdollisuuksien mukaan puhtaina.
- Lisätkää uusia muotoja vapaasti älkääkä muokatko olemassa olevia kutsujia.
- Käyttäkää pieniä käyttäytymistä kuvaavia rajapintoja, kuten muotoiluun ja suodatukseen tarkoitettuja rajapintoja, ominaisuuksien laajentamiseen.
Rajapinnan hyöty
Kertaus
Kertaus: Ottakaa parametreina vastaan IShape, käsitelkää sekalaisia listoja ja lisätkää muotoja koskematta kutsujiin. Koostakaa pieniä toimintoja muotoilua tai suodatusta varten, jotta koodi pysyy joustavana.
Opi C# tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 93
- Oppitunnit
- 346
Usein kysytyt kysymykset
Onko oppitunti ”Polymorfiset toimintatavat” ilmainen?
Kyllä – oppitunnin ”Polymorfiset toimintatavat” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko C# Academy-kurssin, päivitä CoddyKit PROhon. C# Academy-kurssilla on yhteensä 3 oppituntia.
Mitä opin oppitunnilla ”Polymorfiset toimintatavat”?
Käyttäkää rajapintapohjaista polymorfismia: käsitelkää erilaisia muotoja yhdenmukaisesti, lisätkää uusia muotoja muuttamatta kutsujia ja koostakaa pieniä toimintatapoja. Harjoittelet C# Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni C# Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin C# Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/3.
Kuinka kauan ”Polymorfiset toimintatavat”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä C# Academy-oppitunnilla?
Kyllä. Jokainen C# Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Suunnittelu (rajapinnat ja periytyminen)
- Toteutus ja testit
- Polymorfiset toimintatavat