Akademi C# · Pelajaran

Lebihan Muatan Operator Aritmetik

Takrifkan +, -, * untuk jenis anda sendiri.

Pelajaran 1 daripada 413 langkah

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 static dengan kata kunci operator.
  • Sekurang-kurangnya satu parameter mestilah jenis yang mengandunginya.
  • Kembalikan nilai baharu; jangan ubah operan.
  • Sediakan kedua-dua susunan operan untuk aritmetik jenis campuran.
Percuma untuk bermula

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

  1. Lebihan Muatan Operator Aritmetik
  2. Lebihan Muatan Operator Perbandingan
  3. Penukaran Ditakrifkan Pengguna
  4. Amalan Terbaik Lebihan Muatan Operator
← Kembali ke Akademi C#