共用方式為


out (泛型修飾詞) (C# 參考)

對於泛型型別參數, out 關鍵詞會指定類型參數為covariant。 您可以在泛型介面和委派中使用 out 關鍵詞。

共變數可讓您使用比泛型參數所指定的衍生類型更衍生的類型。 這允許實作 covariant 介面的類別隱含轉換,以及委派類型的隱含轉換。 參考型別支援共變數和反變數,但實值型別不支援共變數和反變數。

具有 covariant 類型參數的介面可讓其方法傳回比類型參數指定的衍生類型更多。 例如,由於在 .NET Framework 4 中,在 中, IEnumerable<T>類型 T 是 covariant,因此您可以將類型的物件 IEnumerable(Of String) 指派給型別的物件 IEnumerable(Of Object) ,而不需使用任何特殊的轉換方法。

covariant 委派可以指派相同類型的另一個委派,但具有更衍生的泛型型別參數。

如需詳細資訊,請參閱 共變數和反變數

範例 - covariant 泛型介面

下列範例示範如何宣告、擴充及實作 covariant 泛型介面。 它也會示範如何針對實作covariant介面的類別使用隱含轉換。

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

在泛型介面中,如果類型參數符合下列條件,則可以宣告 covariant:

  • 型別參數只能當做介面方法的傳回型別,而不是當做方法自變數的類型使用。

    備註

    此規則有一個例外狀況。 如果在 covariant 介面中,您有反變數泛型委派做為方法參數,您可以使用 covariant 類型做為此委派的泛型型別參數。 如需 covariant 和 contravariant 泛型委派的詳細資訊,請參閱 委派中的變異和使用 Func 和 Action 泛型委派的變異數

  • 類型參數不會做為介面方法的泛型條件約束。

範例 - covariant 泛型委派

下列範例示範如何宣告、具現化及叫用 covariant 泛型委派。 它也會示範如何隱含地轉換委派類型。

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

在泛型委派中,如果型別只做為方法傳回型別,而且不用於方法自變數,則可以宣告 covariant。

C# 語言規格

如需詳細資訊,請參閱<C# 語言規格>。 語言規格是 C# 語法和使用方式的最終來源。

另請參閱