in (Genel Değiştirici) (C# Başvurusu)
Genel tür parametreleri için in
anahtar sözcüğü tür parametresinin değişkensiz olduğunu belirtir. Anahtar sözcüğünü in
genel arabirimlerde ve temsilcilerde kullanabilirsiniz.
Contravariance, genel parametre tarafından belirtilenden daha az türetilmiş bir tür kullanmanızı sağlar. Bu, değişken karşıtı arabirimler 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. Genel tür parametrelerindeki kovaryans ve contravariance, başvuru türleri için desteklenir, ancak değer türleri için desteklenmez.
Bir tür, genel bir arabirimde veya temsilcide, yalnızca yöntemin dönüş türünde değil, yöntemin parametrelerinin türünü tanımlıyorsa değişken olarak bildirilebilir. In
, ref
ve out
parametreleri sabit olmalıdır; başka bir deyişle, bunlar birlikte değişken veya değişken karşıtı değildir.
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, arabiriminde IComparer<T> T türü değişkendir, devralıyorsa Employee
Person
özel dönüştürme IComparer<Person>
yöntemleri kullanmadan türündeki bir nesneyi türündeki IComparer<Employee>
bir nesneye 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.
Daha fazla bilgi için bkz . Kovaryans ve Contravariance.
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<in A> { }
// Extending contravariant interface.
interface IExtContravariant<in A> : IContravariant<A> { }
// Implementing contravariant interface.
class Sample<A> : IContravariant<A> { }
class Program
{
static void Test()
{
IContravariant<Object> iobj = new Sample<Object>();
IContravariant<String> istr = new Sample<String>();
// You can assign iobj to istr because
// the IContravariant interface is contravariant.
istr = iobj;
}
}
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 void DContravariant<in A>(A argument);
// Methods that match the delegate signature.
public static void SampleControl(Control control)
{ }
public static void SampleButton(Button button)
{ }
public void Test()
{
// Instantiating the delegates with the methods.
DContravariant<Control> dControl = SampleControl;
DContravariant<Button> dButton = SampleButton;
// You can assign dControl to dButton
// because the DContravariant delegate is contravariant.
dButton = dControl;
// Invoke the delegate.
dButton(new Button());
}
C# dili belirtimi
Daha fazla bilgi edinmek için, bkz. C# Dil Belirtimi. Dil belirtimi, C# sözdizimi ve kullanımı için kesin bir kaynaktır.