C# Academy · Oppitunti

Monikohdistus

Koostakaa yksi kirjasto useille kohdekehyksille yhdestä projektista, käyttäkää ehdollista käännöstä ja varasovitteita rajapintojen erojen käsittelyyn.

Oppitunti 3/38 vaihetta

Monikohdistus 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.

Käsite ja hyödyt

Tavoite: julkaiskaa yksi paketti, joka toimii useilla alustoilla.

  • Yksi projekti tuottaa useita binääritiedostoja
  • Paketin käyttäjät saavat automaattisesti parhaiten sopivan kokoonpanon
  • Käyttäkää pieniä #if-ehtoja, kun API:t poikkeavat toisistaan

Resurssien valinnan perusteet

  • Paketti sisältää kohteiden mukaiset kansiot (esimerkiksi lib/net45 ja lib/netstandard2.0)
  • NuGet valitsee lähimmän yhteensopivan resurssin
  • Pitäkää julkinen API yhdenmukaisena; vain sisäisen koodin tulisi poiketa

Ehdollisen käännöksen esimerkki

Muunnelkaa toteutusta pienillä #if-lohkoilla. Pitäkää julkisen metodin allekirjoitus samana.

#define NET45   // simulate building for different targets
// #define NETSTANDARD2_0

using System;

public class Program
{
  public static void Main(string[] args)
  {
    Console.WriteLine("Target: " + TargetName());
  }

  // Public API: stays the same across targets
  public static string TargetName()
  {
#if NET45
    return "net45 build";
#elif NETSTANDARD2_0
    return "netstandard2.0 build";
#else
    return "unknown target";
#endif
  }
}

Vakaa API, sisäiset sovitukset

Pitäkää julkinen API samana; piilottakaa erot pienten sovitusten taakse, jotta kutsujien ei tarvitse tietää, mitä kohdetta käytetään.

#define NET45

using System;
using System.IO;

public class Program
{
  // Public API is stable; internal implementation differs.
  public static string ReadAllTextCompat(string path)
  {
#if NET45
    // net45 has File.ReadAllText; use it directly.
    return File.ReadAllText(path);
#else
    // Example shim path (for an older TF that lacks some helper API)
    using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
    using (var sr = new StreamReader(fs))
    {
      return sr.ReadToEnd();
    }
#endif
  }

  public static void Main(string[] args)
  {
    // For demo, write then read
    string p = "demo.txt";
    File.WriteAllText(p, "hello");
    Console.WriteLine(ReadAllTextCompat(p));
  }
}

Määritysvinkit

  • Luetelkaa kohteet projektissa käyttämällä TargetFrameworks-asetusta (monikossa)
  • Rajaattehan #if-ehdot pieniin apumetodeihin ja pidätte suurimman osan koodista yhteisenä
  • Testatkaa jokainen kohde; suorittakaa yksikkötestit kutakin TFM:ää kohti
  • Julkaiskaa yksi paketti, joka sisältää kaikkien kohteiden resurssit

Yleiset sudenkuopat

  • Älkää julkaisko eri kohteille erilaisia julkisia API:eja
  • Välttäkää syviä #if-sisäkkäisyyksiä ja käyttäkää pieniä sovituksia
  • Kiinnittäkää huomiota implisiittisen toiminnan eroihin (polut, koodaukset)
  • Dokumentoikaa kohdekohtaiset rajoitukset

Miksi monikohdistusta käytetään

Pikakysymys: mikä on kirjaston monikohdistuksen tärkein hyöty?

Kertaus

Kertaus: Monikohdistus julkaisee useita binääritiedostoja yhdestä projektista. Pitäkää julkinen API yhdenmukaisena, piilottakaa erot pienten #if-sovitusten taakse ja paketoikaa kaikki kohteet yhdessä.

Aloita maksutta

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 ”Monikohdistus” ilmainen?

Kyllä – oppitunnin ”Monikohdistus” 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 ”Monikohdistus”?

Koostakaa yksi kirjasto useille kohdekehyksille yhdestä projektista, käyttäkää ehdollista käännöstä ja varasovitteita rajapintojen erojen käsittelyyn. 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 ”Monikohdistus”-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

  1. Kirjaston ja sovelluksen .csproj sekä semanttinen versiointi
  2. Paketointi ja julkaiseminen NuGetiin
  3. Monikohdistus
← Takaisin: C# Academy