變數型別作為引數和返回值

如果協變型別顯示為輸出,則包含型別是協變的。生產 Ts 的生產者就像生產 Ts。

interface IReturnCovariant<out T>
{
    IEnumerable<T> GetTs();
}

如果逆變型別顯示為輸出,則包含型別是逆變的。生產 Ts 的消費者就像消費 Ts。

interface IReturnContravariant<in T>
{
    IComparer<T> GetTComparer();
}

如果協變型別顯示為輸入,則包含型別是逆變的。消費 Ts 的生產者就像消費 Ts。

interface IAcceptCovariant<in T>
{
    void ProcessTs(IEnumerable<T> ts);
}

如果逆變型別顯示為輸入,則包含型別是協變的。消費 Ts 的消費者就像生產 Ts。

interface IAcceptContravariant<out T>
{
    void CompareTs(IComparer<T> tComparer);
}