In (Genel Değiştirici) (Visual Basic)
Genel tür parametreleri için In
anahtar sözcüğü tür parametresinin değişkensiz olduğunu belirtir.
Açıklamalar
Contravariance, genel parametre tarafından belirtilenden daha az türetilmiş bir tür kullanmanızı sağlar. 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ü In
genel arabirimlerde ve temsilcilerde kullanabilirsiniz.
Tür parametresi, yalnızca yöntem bağımsız değişkenlerinin türü olarak kullanılıyorsa ve yöntem dönüş türü olarak kullanılmıyorsa genel bir arabirimde veya temsilcide değişken karşıtı olarak bildirilebilir. ByRef
parametreleri birlikte değişken veya değişken karşıtı olamaz.
Kovaryans ve kontravaryans, başvuru türleri için desteklenir ve değer türleri için desteklenmez.
Visual Basic'te, temsilci türünü belirtmeden değişken olmayan arabirimlerde olayları bildiremezsiniz. Ayrıca, değişken karşıtı arabirimler iç içe sınıflara, numaralandırmalara veya yapılara sahip olamaz, ancak iç içe arabirimlere sahip olabilirler.
Davranış
Değişken karşıtı tür parametresine sahip bir arabirim, yöntemlerinin arabirim türü parametresi tarafından belirtilenlerden daha az türetilmiş türdeki bağımsız değişkenleri kabul etmesine olanak tanır. Örneğin, .NET Framework 4'te, arabiriminde IComparer<T> T türü değişkensiz olduğundan, türünden devralıyorsa Employee
Person
herhangi bir IComparer(Of Person)
özel dönüştürme yöntemi kullanmadan türündeki IComparer(Of Employee)
bir nesnesine atayabilirsiniz.
Değişken karşıtı bir temsilciye aynı türde başka bir temsilci atanabilir, ancak daha az türetilmiş genel tür parametresiyle.
Örnek - değişken karşıtı genel arabirim
Aşağıdaki örnekte değişken karşıtı genel bir arabirim bildirme, genişletme ve uygulama gösterilmektedir. Ayrıca bu arabirimi uygulayan sınıflar için örtük dönüştürmeyi nasıl kullanabileceğinizi de gösterir.
' Contravariant interface.
Interface IContravariant(Of In A)
End Interface
' Extending contravariant interface.
Interface IExtContravariant(Of In A)
Inherits IContravariant(Of A)
End Interface
' Implementing contravariant interface.
Class Sample(Of A)
Implements IContravariant(Of A)
End Class
Sub Main()
Dim iobj As IContravariant(Of Object) = New Sample(Of Object)()
Dim istr As IContravariant(Of String) = New Sample(Of String)()
' You can assign iobj to istr, because
' the IContravariant interface is contravariant.
istr = iobj
End Sub
Örnek - değişken karşıtı genel temsilci
Aşağıdaki örnekte, değişken karşıtı genel temsilci bildirme, örneği oluşturma ve çağırma adımları gösterilmektedir. Ayrıca, bir temsilci türünü örtük olarak nasıl dönüştürebileceğinizi de gösterir.
' Contravariant delegate.
Public Delegate Sub DContravariant(Of In A)(ByVal argument As A)
' Methods that match the delegate signature.
Public Shared Sub SampleControl(ByVal control As Control)
End Sub
Public Shared Sub SampleButton(ByVal control As Button)
End Sub
Private Sub Test()
' Instantiating the delegates with the methods.
Dim dControl As DContravariant(Of Control) =
AddressOf SampleControl
Dim dButton As DContravariant(Of Button) =
AddressOf SampleButton
' You can assign dControl to dButton
' because the DContravariant delegate is contravariant.
dButton = dControl
' Invoke the delegate.
dButton(New Button())
End Sub
Ayrıca bkz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin