Sdílet prostřednictvím


in (generický modifikátor) (Referenční dokumentace jazyka C#)

Obecný typ parametrů in klíčové slovo určuje, že parametr typu contravariant.Můžete použít in klíčové slovo v obecné rozhraní a delegáty.

Contravariance umožňuje použít méně odvozený typ než určenou parametrem obecný.To umožňuje implicitní převod třídy, které implementují rozhraní variant a implicitní převod typů delegátů.Kovariance a contravariance v parametrech obecný typ jsou podporovány pro typy odkazů, ale nejsou podporovány pro typy hodnot.

Typ lze deklarovat contravariant obecné rozhraní nebo delegáta, pokud je použita pouze jako typ argumenty metody a není použit jako návratový typ metody.Refa out parametry nemohou být varianty.

Rozhraní, které má parametr typu contravariant umožňuje jeho metody přijmout argumenty méně odvozené typy než zadaný v parametru typu rozhraní.Například protože v.NET Framework 4, v IComparer rozhraní, je typ t contravariant, můžete přiřadit objektu IComparer(Of Person) typu objektu IComparer(Of Employee) typu bez použití jakékoli zvláštní převodu metod, pokud Employee dědí Person.

Delegát contravariant lze přiřadit delegáta jiné stejného typu, ale s méně odvozený obecný typ parametru.

Další informace naleznete v tématu Kovariance a kontravariance (C# and Visual Basic).

Příklad

Následující příklad ukazuje, jak deklarovat, rozšiřovat a obecné rozhraní contravariant.Také ukazuje, jak můžete použít implicitní převod pro třídy, které implementují rozhraní.

// Contravariant interface. 
interface IContravariant<in A> { }

// Extending contravariant interface. 
interface IExtContravariant<in A> : IContravariant<A> { }

// Implementing contravariant interface. 
class Sample<A> : IContravariant<A> { }

class Program
{
    static void Test()
    {
        IContravariant<Object> iobj = new Sample<Object>();
        IContravariant<String> istr = new Sample<String>();

        // You can assign iobj to istr because 
        // the IContravariant interface is contravariant.
        istr = iobj;
    }
}

Následující příklad ukazuje, jak deklarovat konkretizovat a vyvolat contravariant obecný delegáta.Také ukazuje, jak implicitně převést typ delegáta.

// Contravariant delegate. 
public delegate void DContravariant<in A>(A argument);

// Methods that match the delegate signature. 
public static void SampleControl(Control control)
{ }
public static void SampleButton(Button button)
{ }

public void Test()
{

    // Instantiating the delegates with the methods.
    DContravariant<Control> dControl = SampleControl;
    DContravariant<Button> dButton = SampleButton;

    // You can assign dControl to dButton 
    // because the DContravariant delegate is contravariant.
    dButton = dControl;

    // Invoke the delegate.
    dButton(new Button()); 
}

Specifikace jazyka C#

Další informace najdete 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

out (generický modifikátor) (Referenční dokumentace jazyka C#)

Modifikátory (Referenční dokumentace jazyka C#)

Další zdroje

Kovariance a kontravariance (C# and Visual Basic)