Aritmetik İşleçleri Aşırı Yükleme
Kendi türleriniz için +, - ve * tanımlayın.
Aritmetik İşleçleri Aşırı Yükleme, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.
Aritmetik İşleçler Neden Aşırı Yüklenir?
İşleç aşırı yükleme, kendi türlerinizin +, - ve * gibi tanıdık sembolleri kullanmasını sağlar. Vektörler, para veya karmaşık sayılar gibi değer türlerinde bu, kodun yöntem çağrıları yerine matematik gibi okunmasını sağlar.
İşleç + Sözdizimi
Aşırı yüklenmiş bir işleç, adı sembolün ardından gelen operator olan bir public static yöntem olarak bildirilir. Parametrelerden en az biri kapsayan türde olmalıdır.
using System;
public struct Vector2
{
public int X, Y;
public Vector2(int x, int y) { X = x; Y = y; }
public static Vector2 operator +(Vector2 a, Vector2 b)
=> new Vector2(a.X + b.X, a.Y + b.Y);
public override string ToString() => "(" + X + ", " + Y + ")";
}
public class Program
{
public static void Main()
{
var sum = new Vector2(1, 2) + new Vector2(3, 4);
Console.WriteLine(sum);
}
}Çıkarma ve Çarpma
Aynı türde birden çok işleci aşırı yükleyebilirsiniz. Burada vektörümüze çıkarma ve skaler çarpma ekliyoruz.
using System;
public struct Vector2
{
public int X, Y;
public Vector2(int x, int y) { X = x; Y = y; }
public static Vector2 operator -(Vector2 a, Vector2 b)
=> new Vector2(a.X - b.X, a.Y - b.Y);
public static Vector2 operator *(Vector2 a, int k)
=> new Vector2(a.X * k, a.Y * k);
public override string ToString() => "(" + X + ", " + Y + ")";
}
public class Program
{
public static void Main()
{
var v = new Vector2(5, 6) - new Vector2(2, 1);
Console.WriteLine(v);
Console.WriteLine(new Vector2(2, 3) * 4);
}
}İşleçler Her Zaman Statiktir
Aşırı yüklenmiş işleçler static olmalıdır. Gizli bir this üzerinde çalışmazlar; bunun yerine işlenenler açık parametreler olarak iletilir. Derleyici sembolü yönteme eşler.
using System;
public struct Money
{
public decimal Amount;
public Money(decimal amount) { Amount = amount; }
public static Money operator +(Money a, Money b)
=> new Money(a.Amount + b.Amount);
public override string ToString() => "$" + Amount;
}
public class Program
{
public static void Main()
{
var total = new Money(10.5m) + new Money(4.25m);
Console.WriteLine(total);
}
}Tekli İşleçler
Olumsuzlama gibi tekli işleçler tek bir işlenen alır. operator - işleçini tek parametreyle aşırı yükleyerek -v gibi ifadeleri destekleyiniz.
using System;
public struct Vector2
{
public int X, Y;
public Vector2(int x, int y) { X = x; Y = y; }
public static Vector2 operator -(Vector2 a)
=> new Vector2(-a.X, -a.Y);
public override string ToString() => "(" + X + ", " + Y + ")";
}
public class Program
{
public static void Main()
{
Console.WriteLine(-new Vector2(3, -7));
}
}Farklı Türlerde İşlenenler
İşlenenlerden biri farklı bir türde olabilir. Her iki sırayı da sağlamak, kullanıcıların ifadeyi iki yönde de doğal biçimde yazabilmesini sağlar.
using System;
public struct Temperature
{
public double Celsius;
public Temperature(double c) { Celsius = c; }
public static Temperature operator +(Temperature t, double delta)
=> new Temperature(t.Celsius + delta);
public static Temperature operator +(double delta, Temperature t)
=> new Temperature(t.Celsius + delta);
public override string ToString() => Celsius + "C";
}
public class Program
{
public static void Main()
{
Console.WriteLine(new Temperature(20) + 5);
Console.WriteLine(5 + new Temperature(20));
}
}Yeni Değerler Döndürme
Aritmetik işleçler işlenenlerini değiştirmemelidir. Tıpkı int gibi hesaplayıp yeni bir değer döndürmeli ve özgün değerleri değiştirmemelidir.
using System;
public struct Vector2
{
public int X, Y;
public Vector2(int x, int y) { X = x; Y = y; }
public static Vector2 operator +(Vector2 a, Vector2 b)
=> new Vector2(a.X + b.X, a.Y + b.Y);
public override string ToString() => "(" + X + ", " + Y + ")";
}
public class Program
{
public static void Main()
{
var a = new Vector2(1, 1);
var b = new Vector2(2, 2);
var c = a + b;
Console.WriteLine("a unchanged: " + a);
Console.WriteLine("result: " + c);
}
}Aritmetik İşlemleri Zincirleme
Her işleç aynı türü döndürdüğü için ifadeler doğal biçimde zincirlenir ve normal öncelik ile birleşme kurallarına uyar.
using System;
public struct Vector2
{
public int X, Y;
public Vector2(int x, int y) { X = x; Y = y; }
public static Vector2 operator +(Vector2 a, Vector2 b) => new Vector2(a.X + b.X, a.Y + b.Y);
public static Vector2 operator *(Vector2 a, int k) => new Vector2(a.X * k, a.Y * k);
public override string ToString() => "(" + X + ", " + Y + ")";
}
public class Program
{
public static void Main()
{
var result = new Vector2(1, 1) + new Vector2(2, 2) * 3;
Console.WriteLine(result);
}
}Sınıflarda İşleçler
İşleç aşırı yükleme yalnızca yapı türlerinde değil, sınıflarda da çalışır. null değerine dikkat ediniz: bir sınıf işleneni null olabilir; gerekirse bunu denetleyiniz.
using System;
public class Complex
{
public double Re, Im;
public Complex(double re, double im) { Re = re; Im = im; }
public static Complex operator +(Complex a, Complex b)
=> new Complex(a.Re + b.Re, a.Im + b.Im);
public override string ToString() => Re + " + " + Im + "i";
}
public class Program
{
public static void Main()
{
Console.WriteLine(new Complex(1, 2) + new Complex(3, 4));
}
}Eksiksiz Bir Sayısal Tür
Burada toplama işlemini destekleyen küçük bir kesir türü bulunmaktadır. Aşırı yüklemenin, bir alan türünü yerleşik bir sayı gibi davranan bir türe nasıl dönüştürdüğünü gösterir.
using System;
public struct Fraction
{
public int Num, Den;
public Fraction(int num, int den) { Num = num; Den = den; }
public static Fraction operator +(Fraction a, Fraction b)
=> new Fraction(a.Num * b.Den + b.Num * a.Den, a.Den * b.Den);
public override string ToString() => Num + "/" + Den;
}
public class Program
{
public static void Main()
{
Console.WriteLine(new Fraction(1, 2) + new Fraction(1, 3));
}
}Kendiniz Deneyiniz
Para benzeri bir yapı türüne toplama ve skaler çarpma ekleyiniz, ardından sıradan aritmetik gibi okunan bir ifade oluşturunuz.
using System;
public struct Money
{
public decimal Amount;
public Money(decimal a) { Amount = a; }
public static Money operator +(Money a, Money b) => new Money(a.Amount + b.Amount);
public static Money operator *(Money a, int qty) => new Money(a.Amount * qty);
public override string ToString() => "$" + Amount;
}
public class Program
{
public static void Main()
{
var price = new Money(4.50m);
var total = price * 3 + new Money(2.00m);
Console.WriteLine(total);
}
}Hızlı Kontrol
Aşırı yüklenmiş bir işlecin imzasını hatırlayınız.
Özet
Aritmetik işleçleri aşırı yüklemek, değer türlerinin matematik gibi okunmasını sağlar.
- Onları
operatoranahtar sözcüğüylepublic staticolarak bildiriniz. - Parametrelerden en az biri kapsayan türde olmalıdır.
- Yeni bir değer döndürünüz; işlenenleri asla değiştirmeyiniz.
- Farklı türlerdeki aritmetik işlemler için her iki işlenen sırasını da sağlayınız.
Sıkça Sorulan Sorular
“Aritmetik İşleçleri Aşırı Yükleme” dersi ücretsiz mi?
Evet — “Aritmetik İşleçleri Aşırı Yükleme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.
“Aritmetik İşleçleri Aşırı Yükleme” dersinde ne öğreneceğim?
Kendi türleriniz için +, - ve * tanımlayın. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C# Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Aritmetik İşleçleri Aşırı Yükleme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Aritmetik İşleçleri Aşırı Yükleme
- Karşılaştırma İşleçlerini Aşırı Yükleme
- Kullanıcı Tanımlı Dönüşümler
- İşleç Aşırı Yükleme için En İyi Uygulamalar