Neúplné typy umožňují programátorovi rozdělit implementaci do několika samostatných souborů. Přesněji platí pro zdrojový kód jedné třídy, struktury a rozhraní. Neúplné typy jsou deklarovány pomocí typového modifikátoru partial a musí být umístěny ve stejném jmenném prostoru jako ostatní rozdělené části.
Výhody využití neúplných typů:
několik vývojářů může ve stejnou chvíli pracovat nad zdrojovým kódem jednoho datového typu, který musí být stejný a je rozdělen do individuálních souborů.
uživatelský kód může být oddělený od generovaného kódu, což zabraňuje nástrojům přepsat uživatelské změny. Tato vlastnost je využita u automaticky generovaného kódu WinForms a u silně typových DataSetů.
možnost rozdělení větších implementací
možné ulehčení údržby a řízení změn ve zdrojovém kódu
umožňuje psaní kódu code-beside narozdíl od code-behind, což je využito u tvorby webových aplikací v ASP.NET 2.0
Při využití těchto technologií dochází k částečnému generování kódu, který je následně doplněn specifickým kódem, který dodává programátor. Aby nedocházelo ke kolizi mezi zapsaným kódem a automaticky vygenerovaným kódem je definice tříd, struktur nebo rozhraní rozdělena do individuálních souborů. Individuální soubory poté spojují jeden samostatný typ.
Využitím neúplných typů nijak neovlivníme spustitelný kód.
Soubory, které definují jeden typ jsou spojeny až při přeložení a nelze je později jakýmkoliv způsobem rozšířit nebo modifikovat.
Neúplné typy nepovolují stejné deklarace proměnných v různých částech.
Modifikátor partial není povolen pro deklarace delegátů a objektů typu enum.
Pracujeme-li s neúplnými typy například v prostředí Visual Studio 2005, pak Class View nebo různé navigační lišty, vždy zobrazují typ jako celek, a to nezávisle na tom, do kolika souborů je rozdělen.
Následující příklad prezentuje ukázku na založení a praktické využití neúplných typů, kdy je neúplná třída implementována do dvou částí. Tyto dvě části mohou být v různých zdrojových souborech. Například první část může být strojem generovaná databáze představující nástroj a druhá část je ručně napsaná uživatelem, jak tomu je u třídy Customer:
public partial class Customer { private int id; private string name; private string address; private List<Order> orders; public Customer() { ... } } public partial class Customer { public void SubmitOrder(Order order) { orders.Add(order); } public bool HasOutstandingOrders() { return orders.Count > 0; } } |
Zde vidíme rozložení třídy Customer na dvě části, kde v první části jsou definovány vlastnosti a konstruktor neúplné třídy. Druhá část zahrnuje pouze uživatelem ručně psané metody.