mimo (Generic modifikátor) (C#-Reference)
Obecný typ parametrů out klíčové slovo určuje, že parametr typu covariant.Můžete použít out klíčové slovo v obecné rozhraní a delegáty.
Kovariance můžete použít typ odvozený více než určený parametrem obecný.To umožňuje implicitní převod třídy, které implementují rozhraní variant a implicitní převod typů delegátů.Kovariance a contravariance jsou podporovány pro typy odkazů, ale nejsou podporovány pro typy hodnot.
Rozhraní covariant typ parametru umožňuje jeho metody vrátit více odvozené typy než zadaný v parametru typu.Například protože v.NET Framework 4, v IEnumerable<T>, je typ t covariant, můžete přiřadit objekt IEnumerabe(Of String) typu objektu IEnumerable(Of Object) typu bez použití jakékoli zvláštní převodu metody.
Covariant delegáta lze přiřadit delegáta jiné stejného typu, ale s více odvozený obecný typ parametru.
Další informace naleznete v tématu Kovariance a Contravariance (C# a Visual Basic).
Příklad
Následující příklad ukazuje, jak deklarovat, rozšiřovat a covariant obecné rozhraní.Také ukazuje, jak použít implicitní převod pro třídy, které implementují rozhraní covariant.
// Covariant interface.
interface ICovariant<out R> { }
// Extending covariant interface.
interface IExtCovariant<out R> : ICovariant<R> { }
// Implementing covariant interface.
class Sample<R> : ICovariant<R> { }
class Program
{
static void Test()
{
ICovariant<Object> iobj = new Sample<Object>();
ICovariant<String> istr = new Sample<String>();
// You can assign istr to iobj because
// the ICovariant interface is covariant.
iobj = istr;
}
}
V obecné rozhraní mohou být deklarovány parametr typu covariant, pokud splňuje následující podmínky:
Parametr typu je použita pouze jako návratový typ metody rozhraní a není použit jako typ argumenty metody.
[!POZNÁMKA]
Jedinou výjimkou tohoto pravidla je.Pokud v covariant rozhraní contravariant obecný delegáta jako parametr metody, můžete jako obecný typ parametru typu covariant pro tento delegát.Další informace o covariant a contravariant obecný delegátů, viz Rozptyl Delegáti (C# a Visual Basic) a Použití odchylky pro Func a akce obecný Delegáti (C# a Visual Basic).
Parametr typu nepoužívá jako obecný omezení pro metody rozhraní.
Následující příklad ukazuje, jak deklarovat konkretizovat a vyvolat covariant obecný delegáta.Také ukazuje, jak delegovat typy implicitně převést.
// Covariant delegate.
public delegate R DCovariant<out R>();
// Methods that match the delegate signature.
public static Control SampleControl()
{ return new Control(); }
public static Button SampleButton()
{ return new Button(); }
public void Test()
{
// Instantiate the delegates with the methods.
DCovariant<Control> dControl = SampleControl;
DCovariant<Button> dButton = SampleButton;
// You can assign dButton to dControl
// because the DCovariant delegate is covariant.
dControl = dButton;
// Invoke the delegate.
dControl();
}
V obecné delegát typu lze deklarovat covariant, pokud je použita pouze jako návratový typ metody a nejsou použity pro argumenty metody.
Specifikace jazyka C#
Další informace naleznete v tématu Specifikace jazyka C#. Specifikace jazyka je úplným a rozhodujícím zdrojem pro syntaxi a použití jazyka C#.
Viz také
Referenční dokumentace
v (Generic modifikátor) (C#-Reference)