Out (Genel Değiştirici) (Visual Basic)

Genel tür parametreleri için Out anahtar sözcüğü, türün birlikte değişken olduğunu belirtir.

Açıklamalar

Kovaryans, genel parametre tarafından belirtilenden daha türetilmiş bir tür kullanmanıza olanak tanır. Bu, değişken arabirimleri uygulayan sınıfların örtük olarak dönüştürülmesini ve temsilci türlerinin örtük olarak dönüştürülmesini sağlar.

Daha fazla bilgi için bkz . Kovaryans ve Contravariance.

Kurallar

Anahtar sözcüğünü Out genel arabirimlerde ve temsilcilerde kullanabilirsiniz.

Genel arabirimde, aşağıdaki koşulları karşılarsa tür parametresi birlikte değişken olarak bildirilebilir:

  • tür parametresi yalnızca arabirim yöntemlerinin dönüş türü olarak kullanılır ve yöntem bağımsız değişkenlerinin türü olarak kullanılmaz.

    Not

    Bu kuralın bir özel durumu vardır. Bir kovarant arabirimde yöntem parametresi olarak değişken karşıtı genel temsilciniz varsa, bu temsilci için ortak değişken türünü genel tür parametresi olarak kullanabilirsiniz. Kovaryant ve değişken karşıtı genel temsilciler hakkında daha fazla bilgi için bkz . Temsilcilerde Varyans ve Func ve Eylem Genel Temsilcileri için Varyansı Kullanma.

  • tür parametresi, arabirim yöntemleri için genel bir kısıtlama olarak kullanılmaz.

Genel bir temsilcide, bir tür parametresi yalnızca yöntem dönüş türü olarak kullanılıyorsa ve yöntem bağımsız değişkenleri için kullanılmıyorsa birlikte değişken olarak bildirilebilir.

Kovaryans ve kontravaryans başvuru türleri için desteklenir, ancak değer türleri için desteklenmez.

Visual Basic'te, temsilci türünü belirtmeden olayları birlikte değişken arabirimlerde bildiremezsiniz. Ayrıca, kovarant arabirimler iç içe sınıflara, numaralandırmalara veya yapılara sahip olamaz, ancak iç içe arabirimlere sahip olabilirler.

Davranış

Kovaryant tür parametresine sahip bir arabirim, yöntemlerinin tür parametresi tarafından belirtilenlerden daha fazla türetilmiş tür döndürmesini sağlar. Örneğin, .NET Framework 4'te IEnumerable<T>T türü birlikte değişken olduğundan, türündeki IEnumerable(Of String) bir nesneyi özel dönüştürme yöntemleri kullanmadan türün IEnumerable(Of Object) bir nesnesine atayabilirsiniz.

Birlikte değişken bir temsilciye aynı türden başka bir temsilci atanabilir, ancak daha türetilmiş bir genel tür parametresiyle.

Örnek 1

Aşağıdaki örnek, birlikte değişken genel bir arabirim bildirmeyi, genişletmeyi ve uygulamayı gösterir. Ayrıca, birlikte değişken bir arabirim uygulayan sınıflar için örtük dönüştürmenin nasıl kullanılacağını gösterir.

' Covariant interface.
Interface ICovariant(Of Out R)
End Interface

' Extending covariant interface.
Interface IExtCovariant(Of Out R)
    Inherits ICovariant(Of R)
End Interface

' Implementing covariant interface.
Class Sample(Of R)
    Implements ICovariant(Of R)
End Class

Sub Main()
    Dim iobj As ICovariant(Of Object) = New Sample(Of Object)()
    Dim istr As ICovariant(Of String) = New Sample(Of String)()

    ' You can assign istr to iobj because
    ' the ICovariant interface is covariant.
    iobj = istr
End Sub

Örnek 2

Aşağıdaki örnek, birlikte değişken genel temsilci bildirmeyi, örneği oluşturmayı ve çağırmayı gösterir. Ayrıca, temsilci türleri için örtük dönüştürmeyi nasıl kullanabileceğinizi de gösterir.

' Covariant delegate.
Public Delegate Function DCovariant(Of Out R)() As R

' Methods that match the delegate signature.
Public Shared Function SampleControl() As Control
    Return New Control()
End Function

Public Shared Function SampleButton() As Button
    Return New Button()
End Function

Private Sub Test()

    ' Instantiating the delegates with the methods.
    Dim dControl As DCovariant(Of Control) =
        AddressOf SampleControl
    Dim dButton As DCovariant(Of Button) =
        AddressOf SampleButton

    ' You can assign dButton to dControl
    ' because the DCovariant delegate is covariant.
    dControl = dButton

    ' Invoke the delegate.
    dControl()
End Sub

Ayrıca bkz.