Knihovny tříd .NET
Knihovny tříd jsou konceptem sdílené knihovny
Existují tři typy knihoven tříd, které můžete použít:
- knihovny tříd specifické pro platformu mají přístup ke všem rozhraním API v dané platformě (například rozhraní .NET Framework ve Windows), ale můžou je používat jenom aplikace a knihovny, které tuto platformu cílí.
- přenosné knihovny tříd mají přístup k podmnožině rozhraní API a mohou je používat aplikace a knihovny, které cílí na více platforem.
- knihovny tříd .NET Standard jsou sloučením konceptů specifických pro danou platformu a přenosnou knihovnu do jednoho modelu, který poskytuje to nejlepší z obou.
Knihovny tříd specifických pro platformu
Knihovny specifické pro platformu jsou vázané na jednu platformu .NET (například rozhraní .NET Framework ve Windows) a mohou proto významně záviset na známém spouštěcím prostředí. Takové prostředí zveřejňuje známou sadu rozhraní API (.NET a rozhraní API operačního systému) a udržuje a zveřejňuje očekávaný stav (například registr Windows).
Vývojáři, kteří vytvářejí knihovny specifické pro platformu, můžou plně využít základní platformu. Knihovny se budou spouštět pouze na dané platformě, takže kontroly platforem nebo jiné formy podmíněného kódu nepotřebné (modulo single sourcing code pro více platforem).
Knihovny specifické pro platformu jsou typem knihovny primární třídy pro rozhraní .NET Framework. I když se objevily další implementace .NET, knihovny specifické pro platformu zůstaly dominantním typem knihovny.
Přenosné knihovny tříd
Přenosné knihovny jsou podporovány v několika implementacích .NET. Stále můžou využívat závislosti na známém spouštěcím prostředí, ale toto prostředí je syntetické a je generováno průnikem sady konkrétních implementací .NET. Vystavená rozhraní API a předpoklady ohledně platformy jsou podmnožinou toho, co by bylo dostupné pro knihovnu pro konkrétní platformu.
Při vytváření přenosné knihovny zvolíte konfiguraci platformy. Konfigurace platformy je sada platforem, které potřebujete podporovat (například .NET Framework 4.5+, Windows Phone 8.0+). Čím více platforem se rozhodnete podporovat, tím méně API a předpokladů platformy můžete provést a musíte vycházet z nejmenšího společného jmenovatele. Tato charakteristika může být zpočátku matoucí, protože lidé si často myslí, že "více je lepší", ale zjistí, že více podporovaných platforem vede k menšímu počtu dostupných rozhraní API.
Mnoho vývojářů knihoven přešlo z vytváření více knihoven specifických pro platformu z jednoho zdroje (pomocí direktiv podmíněné kompilace) na přenosné knihovny. Existuje několik přístupů k využití funkcí specifických pro platformu v rámci přenosných knihoven, přičemž v tuto chvíli je nejrozšířenější technikou tzv. bait-and-switch.
Knihovny tříd .NET Standard
Knihovny .NET Standard nahrazují koncepty knihoven specifických pro platformu a přenosné knihovny. Jsou specifické pro danou platformu v tom smyslu, že zpřístupňují všechny funkce z podkladové platformy (žádné syntetické platformy ani průniky platforem). Jsou přenosné v tom smyslu, že pracují na všech podpůrných platformách.
.NET Standard zveřejňuje sadu knihovních kontraktů. Implementace .NET musí podporovat všechny kontrakty plně nebo vůbec. Každá implementace proto podporuje sadu kontraktů .NET Standard. Důsledkem toho je, že každá knihovna tříd .NET Standard je podporována na platformách, které podporují závislosti kontraktu.
.NET Standard nezpřístupňuje všechny funkce rozhraní .NET Framework (ani není cílem), ale knihovny zpřístupňují mnohem více rozhraní API než přenosné knihovny tříd.
Následující implementace podporují knihovny .NET Standard:
- .NET Core
- .NET Framework
- Mono
- Univerzální platforma Windows (UPW)
Další informace naleznete v tématu .NET Standard.
Knihovny mono tříd
Knihovny tříd jsou podporovány v rámci Mono, včetně tří typů knihoven popsaných výše. Mono se často považuje za multiplatformní implementaci rozhraní .NET Framework. Zčásti je to proto, že knihovny rozhraní .NET Framework specifické pro platformu mohou běžet v modulu runtime Mono bez úprav nebo rekompilace. Tato charakteristika byla zavedená před vytvořením přenosných knihoven tříd, takže byla zřejmé, že jde o možnost binární přenositelnosti mezi rozhraním .NET Framework a Mono (i když fungovala pouze v jednom směru).