關於網路那些事...

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

C# 系統集合泛型(System.Collections.Generic) List, Dictionary - 教學筆記 (使用visual studio)

| Comments

前面,我們介紹過C#的泛型
可以讓我們自行設計泛型方法、類別來進行操作資料

在這裡,會說明C#預設提供的泛型集合類別(generic collection classes)
讓我們可以直接拿來使用於操作資料
這些類別主要都被包含在一個Class裡面,稱為系統集合泛型(System.Collections.Generic)
在這裡會介紹 List, Dictionary, Queue, Stack 集合類別


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



Read on →

C# 泛型(Generics) - 教學筆記 (使用visual studio)

| Comments

C# 提供了泛型,讓我們可以用更有彈性的方式來設計Class、Method,操作資料

透過泛型類型 <型別參數T>來代表型別(int, string, double...)

可以在宣告時再指定型別,

以下透過範例來說明幾種情況的用法:

方法泛型 (Generic Method)

在Method使用泛型,只要在Method後面接上泛型類型 <型別參數T>
就可以在宣告時,再指定型別,
並且,可以搭配.GetType()來檢查型別
範例:

static void MyDemo<T>(T x)
{
    Console.WriteLine("您傳入的型別為"+x.GetType()+ ",值=" + x);
}

static void Main(string[] args)
{
    MyDemo<string>("Hello");//您傳入的型別為System.String,值=Hello
    MyDemo<int>(3);//您傳入的型別為System.Int32,值=3
    MyDemo<double>(3.14);//您傳入的型別為System.Double,值=3.14
}

類別泛型(Generics Class)

在class使用泛型,一樣直接加上 <型別參數T> 即可
在這裡示範如何透過Class泛型來手動做一個簡易的list功能

範例:

// Declare the generic class.
public class MyListClass<T>
{
    //初始化array,並參考泛型別
    T[] innerArray = new T[0];
    
    //Add Method - 新增一個array項目
    public void Add(T item)
    {
        Array.Resize(ref innerArray, innerArray.Length + 1);
        innerArray[innerArray.Length - 1] = item;
    }
    
    //Get Method - 取得array特定key的value
    public T Get(int k) {
        return innerArray[k];
    }
    //All Method - return array
    public T[] All()
    {
        return innerArray;
    }
}

static void Main(string[] args)
{
    // Declare a list of type int.
    MyListClass<int> listA = new MyListClass<int>();
    listA.Add(3);
    listA.Add(4);
    listA.Add(5);
    listA.Add(2);
    foreach (int row in listA.All()) {
        Console.WriteLine(row);
    }
}

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



C# 用 system.IO 操作檔案 - 教學筆記 (使用visual studio)

| Comments

使用C# System.IO namespace,可以用在檔案建立、寫入、讀取...

在這裡,主要介紹 System.IO 的 File Class

WriteAllText 寫入/建立檔案

透過WriteAllText可以將文字寫入檔案(如果檔案不存在,會自動建立),格式為:

File.WriteAllText(檔案位置及名稱, 字串);

範例:

string x = "Hello text";
File.WriteAllText("myfilename.txt", x);

ReadAllText 讀取文件

使用ReadAllText可以直接讀取文件中的內容,格式為:

File.ReadAllText(檔案位置及名稱);

建立檔案 & 讀取檔案 範例:

//建立檔案
string x = "Hello text";
File.WriteAllText("myfilename.txt", x);
//讀取檔案
string y = File.ReadAllText("myfilename.txt");
Console.WriteLine(y); 

AppendAllText 插入文字

C# 將字串插入文件內容尾端
範例:

File.AppendAllText("myfilename.txt", " append text to the end.");
string y = File.ReadAllText("myfilename.txt");
Console.WriteLine(y);

Exists 判斷檔案是否存在

透過 Exists 可以判斷檔案是否已經存在
返回布林值

File.Exists(檔案位置及名稱);

範例

if (File.Exists("myfilename.txt")) {
    Console.WriteLine("Yes");
}else{
    Console.WriteLine("No");
}

Delete 刪除檔案

刪除指定的檔案

File.Delete(檔案位置及名稱);

範例

File.Delete("myfilename.txt");
if (File.Exists("myfilename.txt")) {
    Console.WriteLine("Yes");
}else
{
    Console.WriteLine("No");
}

Copy 複製檔案

將檔案複製到指定路徑

File.Copy(檔案位置及名稱, 要複製的位置及新檔案名稱);

範例

File.Copy("myname.txt", "myname2.txt");
string x = File.ReadAllText("myname2.txt");
Console.WriteLine(x);

Move 移動檔案

透過Move可以移動資料到指定的位置,並且可以重新命名
(當然,一般移動都會維持原始名稱)

File.Move(檔案位置及名稱, 要移動的位置及新檔案名稱);

範例

File.Move("myname.txt", "file/myname2.txt");
string x = File.ReadAllText("file/myname2.txt");

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



C# try-catch 例外處理(Execption Handling) - 教學筆記 (使用visual studio)

| Comments

例外處理,可以處理一些未知且發生錯誤的情況,例如: 輸入不合法(型別不符)的值、找不到要開啟的資料、處理資料時突然失去連線...。

在C# 例外處理使用 try-catch 陳述式

只要將一般陳述式放在try區塊,

當try區塊發生發生時,就會移向catch區塊,用Exception擷取錯誤


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



Read on →

C# 結構(Structs) - 教學筆記 (使用visual studio)

| Comments

C# 的 Struct 是一個value type的小群組,

在管理程式變數時,非常好用

例如,對於註冊用戶資料,會包含姓名、性別、住址....
透過struct,就可以將用戶資料統整成一個群組結構


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



Read on →

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

| Comments

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)

| Comments

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

readonly可以在建構子裡面修改


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



Read on →

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

| Comments

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


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



Read on →

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

| Comments

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

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


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



Read on →

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

| Comments

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


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



Read on →