Udostępnij przez


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

W przypadku parametrów typu ogólnego słowo kluczowe określa, out że parametr typu jest kowariantny. Użyj słowa kluczowego out w interfejsach ogólnych i delegatach.

Kowariancja umożliwia użycie bardziej pochodnego typu niż określa parametr ogólny. Ta funkcja umożliwia niejawną konwersję klas implementujących interfejsy kowariantne i niejawną konwersję typów delegatów. Kowariancja i kontrawariancja obsługują typy odwołań, ale nie obsługują typów wartości.

Interfejs z kowariantnym parametrem typu umożliwia jego metodom zwracanie większej liczby typów pochodnych niż te określone przez parametr typu. Na przykład, ponieważ na platformie .NET typ IEnumerable<T>T jest kowariantny, można przypisać obiekt typu do obiektu IEnumerable<string>IEnumerable<object> typu bez użycia żadnych specjalnych metod konwersji.

Można przypisać współwariantnego delegata do innego delegata tego samego typu, ale z bardziej pochodnym parametrem typu ogólnego.

Aby uzyskać więcej informacji, zobacz Covariance i Contravariance.

Dokumentacja języka C# zawiera ostatnio wydaną wersję języka C#. Zawiera również początkową dokumentację dla funkcjonalności w publicznych wersjach testowych nadchodzącego wydania języka.

Dokumentacja identyfikuje dowolną funkcję po raz pierwszy wprowadzoną w ostatnich trzech wersjach języka lub w bieżącej publicznej wersji zapoznawczej.

Wskazówka

Aby dowiedzieć się, kiedy funkcja została po raz pierwszy wprowadzona w języku C#, zapoznaj się z artykułem dotyczącym historii wersji języka C#.

W poniższym przykładzie pokazano, jak deklarować, rozszerzać i implementować kowariantny interfejs ogólny. Pokazano również, jak używać niejawnej konwersji dla klas implementujących kowariantny interfejs.

// 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 ogólnym zadeklaruj kowariantę parametru typu, jeśli spełnia następujące warunki:

W poniższym przykładzie pokazano, jak zadeklarować, utworzyć wystąpienie i wywołać współwariantnego delegata ogólnego. Przedstawiono również sposób niejawnego konwertowania typów delegatów.

// 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 delegatu ogólnym zadeklaruj kowariantny typ, jeśli używasz go tylko jako typu zwracanego metody, a nie 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 także