創作內容

25 GP

【筆記】C# 擴充方法Extension、運算符多載operator

作者:樂小呈│2021-02-13 11:47:13│巴幣:50│人氣:722
C# 筆記
擴充方法Extension 和運算符多載operator

Extension
class 擴充功能寫法,可以自己寫一些想要的擴充功能
寫在static class 中,使用static 函數,調用著變量自身做為輸入
static class VariableExtension
{
    static Var function (this variable)
    {
        return variable...
    }
}

> integer 轉二進制
int i = 0b1101;
int a = i.GetBit(0); //1
int b = i.GetBit(1); //0
int c = i.GetBit(2); //1
int d = i.GetBit(3); //1
public static int GetBit(this int i, int bit)
{
    return i & (1 << bit);   
}
註: 最後會補充邏輯閘運算和指定二進制數值

> string 分割
string text = "extension example split with space"
string[] split = text.SplitWithSpace(); //extension, example, split, with, space
public static string[] SplitWithSpace(this string s)
{
    return s.Split(' ');
}

> enum 判斷
Animal animal = Animal.Cat;
animal.IsDot(); //false
public enum Animal
{
    Dog,
    Cat,
    Ant
}
public static bool IsDog(this Animal an)
{
    return an == Animal.Dog;
}

運算子多載 operator
在自訂一些數據類型的時候,可以用operator 讓他支援運算子的簡寫
Vector vectorA = vectorB + vectorC;
public static Vector operator +(Vector vector1, Vector vector2)
{
    return new Vector()
    {
        x = vector1.x + vector2.x,
        y = vector1.y + vector2.y,
    };
}

Vector vectorA = -vectorB
public static Vector operator -(Vector vector)
{
    return new Vector()
    {
        x = -vector.x,
        y = -vector.y,
    };
}
註: 沒辦法在extension 裡用operator,因為extension 只能寫在static class,但operator 不允許在static class 使用

額外補充先放這裡,之後可能會把這種換算獨立成一章筆記
額外補充 - integer 用不同進位方式指數值
int v = 0b10110 = 二進制的 10110 = 十進位的 21
int v = 0x1E240 = 十六進位的 1E240 = 十進位的 123456
基本上除了測試東西不太會用這種方式指定數值拉,只要知道有這東西就好

額外補充 - 位元移動
<< (左移) 把位元往左移
int a = 0b011;
a << 1 = 110

>> (右移) 把位元往右移
int a = 0b110;
a >> 1 = 011
註: 移超出進位範圍的位元會被吃掉

額外補充 - 邏輯閘,用於二進制的判斷
& (及閘 and) 如果兩個都是1,回傳1
110 & 111 = 110

| (或閘 or) 只要任意是1,回傳1
110 | 101 = 111

^ (遮罩 xor) 只要不相同,回傳1 (!= 的概念)
110 ^ 111 = 001

(反遮罩 nxor,但C# 沒有這個邏輯閘的樣子) 只要相同,回傳1 (== 的概念)
100 nxor 101 = 110

引用網址:https://home.gamer.com.tw/TrackBack.php?sn=5069357
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:筆記|程式|C#

留言共 9 篇留言

kiwi(薇薇安)

02-13 11:50

樂小呈
不佬,怎麼連你也學壞了[e21]02-13 11:54
kiwi(薇薇安)
被帶壞了XD

02-13 12:00

派大星教授死掉了咩噗

02-13 12:00

樂小呈
都你啦,帶壞人家02-13 12:17
會喵叫的貓
封面有關優秀

02-13 12:31

樂小呈
菜鳥和老手的差別是比較花俏的被程式幹翻02-13 16:19
無害的路人(迷惘狀態)
是佬欸

02-13 14:00

樂小呈
ㄋ們是怎樣啦02-13 16:18
mike
讚 學習了 擴充挺好用的XD

02-13 14:09

樂小呈
方便,不需要再弄冗長的code了02-13 16:19
joLoo 走鹿

02-13 16:41

樂小呈
並沒有02-13 17:02
純淨好水
又佬又霸[e20]

02-13 17:58

樂小呈
你才霸02-13 18:07
Ying
長知識了~感謝分享
範例的部分一開始沒看懂XD

02-13 18:02

樂小呈
ㄅ客氣,能幫到人最棒了 :D02-13 18:07
我要留言提醒:您尚未登入,請先登入再留言

25喜歡★angus945 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:【閒聊】過年... 後一篇:【閒聊】開工和設計模式筆...

追蹤私訊切換新版閱覽

作品資料夾

Summer244各位~
你喜歡玩遊戲嗎?看更多我要大聲說昨天23:05


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】