Lebihan Muatan Operator Aritmetik
Takrifkan +, -, * untuk jenis anda sendiri.
Lebihan Muatan Operator Aritmetik ialah pelajaran Akademi C# percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Akademi C#, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Akademi C# merangkumi sejumlah 4 pelajaran.
Mengapa Membebankan Operator Aritmetik?
Pemuatan berlebihan operator membolehkan jenis anda sendiri menggunakan simbol biasa seperti +, - dan *. Untuk jenis yang menyerupai nilai seperti vektor, wang atau nombor kompleks, ini menjadikan kod kelihatan seperti matematik dan bukannya panggilan kaedah.
Sintaks operator +
Operator yang dimuatkan secara berlebihan diisytiharkan sebagai kaedah public static yang namanya ialah operator diikuti oleh simbol. Sekurang-kurangnya satu parameter mestilah jenis yang mengandunginya.
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);
}
}Penolakan dan Pendaraban
Anda boleh membebankan beberapa operator pada jenis yang sama. Di sini, kami menambah penolakan dan pendaraban skalar pada vektor kami.
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);
}
}Operator Sentiasa static
Operator yang dibebankan secara berlebihan mestilah static. Operator tersebut tidak bertindak pada this tersembunyi; sebaliknya, operan dihantar sebagai parameter yang jelas. Pengkompil memetakan simbol itu kepada kaedah.
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);
}
}Operator Unari
Operator unari seperti penafian mengambil satu operan. Bebankan operator - dengan satu parameter untuk menyokong ungkapan seperti -v.
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));
}
}Operan Jenis Campuran
Salah satu operan boleh terdiri daripada jenis yang berbeza. Menyediakan kedua-dua susunan membolehkan pengguna menulis ungkapan secara semula jadi dalam mana-mana arah.
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));
}
}Mengembalikan Nilai Baharu
Operator aritmetik tidak sepatutnya mengubah operannya. Operator tersebut mengira dan mengembalikan nilai baharu, sambil mengekalkan asalnya tanpa perubahan, sama seperti yang dilakukan oleh int.
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);
}
}Merantai Operasi Aritmetik
Oleh sebab setiap operator mengembalikan jenis yang sama, ungkapan boleh dirangkaikan secara semula jadi dan mematuhi keutamaan serta keasosiatifan biasa.
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);
}
}Operator pada Kelas
Pemuatan berlebihan operator juga berfungsi pada kelas, bukan hanya struktur. Berhati-hati dengan null: operan kelas boleh menjadi null, jadi lakukan pengawalan jika perlu.
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));
}
}Jenis Berangka Lengkap
Berikut ialah jenis pecahan ringkas dengan operasi tambah. Contoh ini menunjukkan cara pemuatan berlebihan mengubah jenis domain menjadi sesuatu yang berkelakuan seperti nombor terbina dalam.
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));
}
}Cuba Sendiri
Tambahkan operasi tambah dan pendaraban skalar pada struktur seperti wang, kemudian bina ungkapan yang kelihatan seperti aritmetik biasa.
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);
}
}Pemeriksaan Pantas
Ingat semula tandatangan operator yang dibebankan secara berlebihan.
Ulang Kaji
Pemuatan berlebihan operator aritmetik menjadikan jenis yang menyerupai nilai kelihatan seperti matematik.
- Isytiharkan operator tersebut sebagai
public staticdengan kata kuncioperator. - Sekurang-kurangnya satu parameter mestilah jenis yang mengandunginya.
- Kembalikan nilai baharu; jangan ubah operan.
- Sediakan kedua-dua susunan operan untuk aritmetik jenis campuran.
Pelajari C# dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 93
- Pelajaran
- 346
Soalan Lazim
Adakah pelajaran “Lebihan Muatan Operator Aritmetik” percuma?
Ya — teks penuh “Lebihan Muatan Operator Aritmetik” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Akademi C#, tingkat taraf kepada CoddyKit PRO. Kursus Akademi C# merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Lebihan Muatan Operator Aritmetik”?
Takrifkan +, -, * untuk jenis anda sendiri. Anda berlatih Akademi C# menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Akademi C#?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Akademi C# di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.
Berapa lamakah pelajaran “Lebihan Muatan Operator Aritmetik” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Akademi C# ini?
Ya. Setiap pelajaran Akademi C# menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Lebihan Muatan Operator Aritmetik
- Lebihan Muatan Operator Perbandingan
- Penukaran Ditakrifkan Pengguna
- Amalan Terbaik Lebihan Muatan Operator