Aracılığıyla paylaş


in (Genel Değiştirici) (C# Başvurusu)

Genel tür parametreleri için in , değişken karşıtı tür bağımsız değişkenlerine izin vermek için anahtar sözcüğünü kullanın. Anahtar sözcüğünü in genel arabirimlerde ve temsilcilerde kullanın.

C# dili başvuru belgesi, C# dilinin en son yayımlanan sürümünü gösterir. Ayrıca, yaklaşan dil sürümü için genel önizlemelerdeki özelliklere yönelik ilk belgeleri içerir.

Belgelerde ilk olarak dilin son üç sürümünde veya geçerli genel önizlemelerde sunulan tüm özellikler tanımlanır.

Tavsiye

Bir özelliğin C# dilinde ilk tanıtıldığı zamanları bulmak için C# dil sürümü geçmişi makalesine bakın.

Contravariance, genel parametre tarafından belirtilen türden daha az türetilmiş bir tür kullanmanıza olanak tanır. Bu özellik, 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. Başvuru türleri genel tür parametrelerinde kovaryansı ve değişken karşıtılığı destekler, ancak değer türleri bu özellikleri desteklemez.

Bir türü genel arabirimde veya temsilcide değişken olarak bildirebilirsiniz, ancak yöntemin dönüş türünü değil, yöntemin parametrelerinin türünü tanımlar. In, refve out parametrelerinin sabit olması gerekir; başka bir deyişle, bunlar birlikte değişken veya değişkendeğişken 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, arabirimde IComparer<T> T değişkensizdir yazın. devralıyorsa PersonEmployee herhangi bir IComparer<Person> özel dönüştürme yöntemi kullanmadan türündeki bir nesneyi türündeki IComparer<Employee> bir nesneye atayabilirsiniz.

Aynı türdeki başka bir temsilciye, ancak daha az türetilmiş genel tür parametresine sahip bir değişken karşıtı temsilci atayabilirsiniz.

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

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# dil belirtimi

Daha fazla bilgi edinmek için, bkz. C# Dil Belirtimi. Dil belirtimi, C# söz dizimi ve kullanımı için kesin kaynaktır.

Ayrıca bakınız