in (modyfikator ogólny) (odwołanie w C#)

Parametry typu rodzajowego in słowa kluczowego Określa, że parametr typu jest kontrawariantnego.Można użyć in słowa kluczowego w interfejsach rodzajowy i delegatów.

Kontrawariancja umożliwia korzystanie z typem pochodnym mniej niż określony przez parametr rodzajowy.Pozwala to na niejawna konwersja klasy, które implementują interfejsy wariantu i niejawna konwersja typu obiektu delegowanego.Kowariancja i kontrawariancja w parametrach typu rodzajowego są obsługiwane dla typu odwołania, ale nie są obsługiwane dla typów wartości.

Typ może być deklarowana kontrawariantnego w rodzajowy interfejsem ani obiektem delegowanym, jeśli jest używane tylko jako typ argumenty tej metody i nie jest używany jako typu zwrotnego metody.Refi out parametrów nie może być wariantem.

Interfejs, który ma parametr typu kontrawariantnego umożliwia jego metod zaakceptować argumenty Typy pochodne, mniej niż określona przez parametr typu interfejsu.Na przykład ponieważ w.NET Framework 4, w IComparer interfejsu typu t jest kontrawariantnego, można przypisać obiekt IComparer(Of Person) typu obiektu z IComparer(Of Employee) pisanie bez użycia jakichkolwiek metod konwersji specjalnych, jeśli Employee dziedziczy Person.

Pełnomocnik kontrawariantnego mogą być przypisane innym delegat tego samego typu, ale mniej pochodnych parametr typu rodzajowego.

Aby uzyskać więcej informacji, zobacz Kowariancja i kontrawariancja (C# i Visual Basic).

Przykład

Poniższy przykład pokazuje, jak zadeklarować, rozszerzenie i implementować interfejs generic kontrawariantnego.Pokazuje także, jak można użyć niejawna konwersja dla klasy, które implementują interfejsu.

// 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;
    }
}

Poniższy przykład pokazuje, jak zadeklarować, wystąpienia i wywoływać Delegat rodzajowy kontrawariantnego.Pokazuje również, jak można niejawnie przekonwertować typem obiektu delegowanego.

// 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()); 
}

Specyfikacja języka C#

Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.

Zobacz też

Informacje

out — Modyfikator ogólny (odwołanie w C#)

Modyfikatory (odwołanie w C#)

Inne zasoby

Kowariancja i kontrawariancja (C# i Visual Basic)