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

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

Kowariancja umożliwia korzystanie z bardziej pochodny typ 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 są obsługiwane dla typu odwołania, ale nie są obsługiwane dla typów wartości.

Interfejs, który ma parametr typu kowariantnego umożliwia jej metody zwracały więcej Typy pochodne niż wartość określona przez parametr typu.Na przykład ponieważ w.NET Framework 4, w IEnumerable, typu t jest kowariantnego, można przypisać obiekt IEnumerabe(Of String) typu obiektu z IEnumerable(Of Object) typu bez metody konwersji specjalne.

Kowariantnego pełnomocnik może być przypisany do innego obiektu delegowanego tego samego typu, ale z bardziej pochodny, 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ć kowariantnego interfejs generic.Pokazuje również, jak używać niejawna konwersja dla klasy, które implementują interfejs kowariantnego.

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

W interfejsie rodzajowy parametru typu może być deklarowana kowariantnego, jeśli spełnia następujące warunki:

  • Parametr typu jest używany tylko jako zwracany typ metody interfejsu i nie są używane jako typ argumenty tej metody.

    [!UWAGA]

    Istnieje jeden wyjątek od tej zasady.Jeśli w interfejsie kowariantnego kontrawariantnego Delegat rodzajowy jako parametr metody, można użyć typu kowariantnego jako parametr typu rodzajowego dla tego obiektu delegowanego.Aby uzyskać więcej informacji na temat kowariantnego i kontrawariantnego delegatów rodzajowy, zobacz Wariancje w delegatach (C# i Visual Basic) i Korzystanie z wariancji dla delegatów Func i Action (C# i Visual Basic).

  • Parametr typu nie jest używany jako rodzajowy ograniczenia dla metod interfejsu.

Poniższy przykład pokazuje, jak zadeklarować, wystąpienia i wywoływać kowariantnego Delegat rodzajowy.Pokazuje również, jak dokonać niejawnej konwersji typów obiektów delegowanych.

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

W Delegat rodzajowy typu może być deklarowana kowariantnego, jeśli jest używane tylko jako typ zwracany metody i nie jest używany dla argumentów metody.

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

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

Modyfikatory (odwołanie w C#)

Koncepcje

Wariancje w interfejsach (C# i Visual Basic)