Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Yerleşik tam sayı ve kayan nokta sayısal türleri ile temsilci türleri, -
ve -=
işleçlerini destekler.
Aritmetik işleç hakkında bilgi için Aritmetik -
işleçler makalesinin Birli artı ve eksiişleçleri ile Çıkarma işleci - bölümlerine bakın.
Vekil kaldırma
Aynı temsilci türündeki işlenenler için -
operatörü, aşağıdaki şekilde hesaplanan bir temsilci örneği döndürür.
her iki işlenen de null değilse ve sağ işlenenin çağrı listesi sol işlenenin çağrı listesinin uygun bir bitişik alt listesiyse, işlemin sonucu sağ işlenenin girdileri sol işlenenin çağrı listesinden kaldırılarak elde edilen yeni bir çağırma listesidir. Sağ işlenenin listesi sol işlenenin listesindeki birden çok bitişik alt listeyle eşleşiyorsa, yalnızca en sağdaki alt liste kaldırılır. Eğer kaldırma işlemi boş bir listeye neden olursa, sonuç
null
olur.Action a = () => Console.Write("a"); Action b = () => Console.Write("b"); var abbaab = a + b + b + a + a + b; abbaab(); // output: abbaab Console.WriteLine(); var ab = a + b; var abba = abbaab - ab; abba(); // output: abba Console.WriteLine(); var nihil = abbaab - abbaab; Console.WriteLine(nihil is null); // output: True
Sağ işlenenin çağrı listesi, sol işlenenin çağrı listesinin doğru biçimlendirilmiş ve bitişik bir alt listesi değilse, işlemin sonucu sol işlenendir. Örneğin, çok noktaya yayın temsilcisinin bir parçası olmayan bir temsilciyi kaldırmak hiçbir etki yaratmaz ve çok noktaya yayın temsilcisi değişmeden kalır.
Action a = () => Console.Write("a"); Action b = () => Console.Write("b"); var abbaab = a + b + b + a + a + b; var aba = a + b + a; var first = abbaab - aba; first(); // output: abbaab Console.WriteLine(); Console.WriteLine(object.ReferenceEquals(abbaab, first)); // output: True Action a2 = () => Console.Write("a"); var changed = aba - a; changed(); // output: ab Console.WriteLine(); var unchanged = aba - a2; unchanged(); // output: aba Console.WriteLine(); Console.WriteLine(object.ReferenceEquals(aba, unchanged)); // output: True
Yukarıdaki örnek, temsilci kaldırma sırasında temsilci örneklerinin karşılaştırıldığını da gösterir. Örneğin, özdeş lambda ifadelerinin değerlendirilmesinden oluşturulan temsilciler eşit değildir. Temsilci eşitliği hakkında daha fazla bilgi için C# dil belirtimininTemsilci eşitliği işleçleri bölümüne bakın.
Eğer sol işlenen
null
ise, işlemin sonucunull
olur. Eğer sağdaki işlenennull
ise, işlemin sonucu soldaki işlenendir.Action a = () => Console.Write("a"); var nothing = null - a; Console.WriteLine(nothing is null); // output: True var first = a - null; a(); // output: a Console.WriteLine(); Console.WriteLine(object.ReferenceEquals(first, a)); // output: True
Temsilcileri birleştirmek için işlecini+
kullanın.
Temsilci türleri hakkında daha fazla bilgi için bkz. Temsilciler.
Çıkarma atama operatörü (-=)
-=
işlecini kullanan bir ifade, örneğin
x -= y
Şu değere eşdeğerdir:
x = x - y
Sadece x
bir kez değerlendirilir.
Aşağıdaki örnekte -=
işlecinin kullanımı gösterilmektedir:
int i = 5;
i -= 9;
Console.WriteLine(i);
// Output: -4
Action a = () => Console.Write("a");
Action b = () => Console.Write("b");
var printer = a + b + a;
printer(); // output: aba
Console.WriteLine();
printer -= a;
printer(); // output: ab
Ayrıca, bir -=
aboneliğini kaldırdığınızda kaldırılacak bir olay işleyici yöntemini belirtmek için işlecini de kullanırsınız. Daha fazla bilgi için Olaylara Nasıl Abone Olunur ve Abonelikten Nasıl Çıkılır bölümlerine bakabilirsiniz.
İşleç aşırı yüklenebilirliği
Kullanıcı tanımlı bir tür, işleci -
. İkili -
işleci aşırı yüklendiğinde, -=
işleci de örtük olarak aşırı yüklenir. C# 14'ten itibaren, kullanıcı tanımlı bir tür daha verimli bir uygulama sağlamak için -=
işlemini açıkça aşırı yükleyebilir. Genellikle, bir tür -=
işleci aşırı yükler çünkü değer, çıkarmanın sonucunu depolamak için yeni bir örnek ayırmak yerine doğrudan güncellenebilir. Bir tür açık bir aşırı yükleme sağlamazsa, derleyici örtük aşırı yüklemeyi oluşturur.
C# dil belirtimi
Daha fazla bilgi için C# dil belirtimininBirli eksi işleci ve Çıkarma işleci bölümlerine bakın. C# 14 ve sonraki sürümlerde bileşik atama işleçlerini aşırı yükleme hakkında daha fazla bilgi için bkz. Kullanıcı tanımlı bileşik atama özelliği belirtimi.