關於網路那些事...

網路行銷,SEO,網路趨勢,創業文章,網頁設計,生活時事

C# 運算子實現類別多載 - 教學筆記 (使用visual studio)

Operator Overloading on Class

在C#設計Class,可以搭配運算子(operator)來做到多載(overloading)
並且,要Overloading的運算子,必須是 static
例如:

    class Box
    {
        public int Height { get; set; }
        public int Width { get; set; }

        public Box(int h, int w)
        {
            Height = h;
            Width = w;
        }
        public static Box operator +(Box a, Box b)
        {
            int h = a.Height + b.Height;
            int w = a.Width + b.Width;
            Box res = new Box(h, w);
            return res;
        }
    }

    static void Main(string[] args)
    {
        Box b1 = new Box(14, 3);
        Box b2 = new Box(5, 7);
        Box b3 = b1 + b2;
        Console.WriteLine(b3.Height);
        Console.WriteLine(b3.Width);
    }

底下範例中,實現多載 operator +, operator -, operator *, operator /

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {

        class Cacul
        {
            public double A;
            public double B;
            public Cacul(double x, double y)
            {
                A = x;
                B = y;
            }
            //constructor 使用 operator overloading +
            public static Cacul operator +(Cacul j, Cacul k)
            {
                double x = j.A + k.A;
                double y = j.B + k.B;
                Cacul z = new Cacul(x, y);
                return z;
            }
            //constructor 使用 operator overloading -
            public static Cacul operator -(Cacul j, Cacul k)
            {
                double x = j.A - k.A;
                double y = j.B - k.B;
                Cacul z = new Cacul(x, y);
                return z;
            }
            //constructor 使用 operator overloading *
            public static Cacul operator *(Cacul j, Cacul k)
            {
                double x = j.A * k.A;
                double y = j.B * k.B;
                Cacul z = new Cacul(x, y);
                return z;
            }
            //constructor 使用 operator overloading /
            public static Cacul operator /(Cacul j, Cacul k)
            {
                double x = j.A / k.A;
                double y = j.B / k.B;
                Cacul z = new Cacul(x, y);
                return z;
            }
        }
        static void Main(string[] args)
        {
            Cacul t1 = new Cacul(3, 4);
            Cacul t2 = new Cacul(5, 6);
            Cacul t3 = t1 + t2;
            Console.WriteLine(t3.A);//8
            Console.WriteLine(t3.B);//10
            Cacul t4 = t1 - t2;
            Console.WriteLine(t4.A);//8
            Console.WriteLine(t4.B);//10
            Cacul t5 = t1 * t2;
            Console.WriteLine(t5.A);//8
            Console.WriteLine(t5.B);//10
            Cacul t6 = t1 / t2;
            Console.WriteLine(t6.A);//8
            Console.WriteLine(t6.B);//10

        }
    }
}


如果你喜歡我們的文章內容,請在這裡按個讚



最新文章推薦

C# Readonly - 教學筆記 (使用visual studio)

readonly與常數用法很像,
相較於常數,readonly通常會用在class流程設計
readonly 在建構子指派值之後,就不能更改

readonly可以在建構子裡面修改


如果你喜歡我們的文章內容,請在這裡按個讚



Read on →

最新文章推薦

C# Math, String, Array, Datetime 類別 - 教學筆記 (使用visual studio)

在這裡記錄一些常用的 C# 內置的靜態類別


如果你喜歡我們的文章內容,請在這裡按個讚



Read on →

最新文章推薦

C# 解構子 Destructors - 教學筆記 (使用visual studio)

前面我們有提到,只要class被實例化(instantiated),當下就會立即執行建構子
而這裡要說明的解構子(destructor),也是在class被實例化時,會被執行

解構子,具有下列特性:
- 一個class只能有一個解構子
- 會在class執行完成,準備結束時自動被調用
- 無法被呼叫
- 不接受修飾符及參數


如果你喜歡我們的文章內容,請在這裡按個讚



Read on →

最新文章推薦

C# get & set 存取子(accessors) - 教學筆記 (使用visual studio)

C# get & set 存取子
class的屬性(Property)可以讓讀、寫、運算機制變得更有彈性,
在這裡要介紹屬性的一個特殊的methods,稱為: 存取子(accessors),也可稱為訪問器
存取子包含 get存取子、set存取子


如果你喜歡我們的文章內容,請在這裡按個讚



Read on →

最新文章推薦

C# 建構子 (Constructors) - 教學筆記 (使用visual studio)

C# 建構子 Constructors 說明
建構子是一個特殊的Method成員,
只要class被實例化,當下就會立即執行建構子(自動被調用)

在C#中,建構子的名稱必須和class一致,並且不需要定義類型
並且,可以傳入參數


如果你喜歡我們的文章內容,請在這裡按個讚



Read on →

最新文章推薦

C# 繼承 (Inheritance) - 教學筆記 (使用visual studio)

C# 繼承(Inheritance) Class 說明

物件導向的方便之處在於,可以被拿來重複使用及擴充
例如,今天新增了使用者檢視列表Class
如果在無法更動情況下,想要擴充新增使用者功能
就可以用繼承(Inheritance)的方式
而被繼承的Class,稱之為「基底類別」(Base Class)

但也要特別留意!
C#不支援多重繼承
所以,只允許繼承一個「基底類別」(Base Class)


如果你喜歡我們的文章內容,請在這裡按個讚



Read on →

最新文章推薦

C# Class, Object (static, public, protected, private)介紹 - 教學筆記 (使用visual studio)

在這裡,會介紹C#的Class 及 Object基本用法

Class基本架構

物件導向開發時,會運用class來作為資料型別

這時,class就好像一個大類別,在這裡面,開發者通常會將具有關聯性的成員(Object、Methods、variable..)統合起來


如果你喜歡我們的文章內容,請在這裡按個讚



Read on →

最新文章推薦

C# Method - Main、void、ref、out、overloading - 教學筆記 (使用visual studio)

在 C# 中,除了可以原本的Method,你也可以定義自己的Method

Method具有以下優點:
- 可重複使用。
- 易於測試。
- 對方法的修改不影響調用程序。
- 一種方法可以接受許多不同的輸入。


如果你喜歡我們的文章內容,請在這裡按個讚



Read on →

最新文章推薦

C# break and continue - 教學筆記 (使用visual studio)

在設計程式過程中,透過continue及break,可以讓程式更有彈性

break

break主要的任務就是用來跳出迴圈或者陳述式
在流程控制中的 switch ,就包含了break
也就是,當switch滿足條件時,就能透過break來跳脫迴圈
如果是用在邏輯演算,同樣也可以搭配break來跳脫
例如,取出五筆資料


如果你喜歡我們的文章內容,請在這裡按個讚



Read on →

最新文章推薦