2018年7月31日 星期二

git教學

https://www.youtube.com/watch?v=B3ooWt6qgSo

https://dotblogs.com.tw/wasichris/2017/09/19/014354

https://docs.google.com/presentation/d/1adyqZrXbgWUPmLXcOqnJXLQVW5O7Y-EE742NuYyaxzY/pub?start=false&loop=false&delayms=3000&slide=id.p19

https://www.youtube.com/watch?v=etTDkZiW1Ng

https://kingofamani.gitbooks.io/git-teach/content/chapter_2/repo.html

https://www.slideshare.net/littlebtc/git-5528339

2018年7月28日 星期六

2018年7月27日 星期五

泛型(GenericClass)傳接值說明

簡單介紹泛型(GenericClass)並實作一個範例
簡單介紹泛型(GenericClass)並實作一個範例

之前在和同事聊天時他有提到說LIST 是用泛型做的
說實在我用List 那麼久了都不知道他的實作基礎泛型是啥東西故上網研究一下
就我個人的觀點來看泛型 的最大特徵就是將傳入 , 傳出的變數型態給變數化
通常我們在撰寫Function 時都要定義輸入輸出的變數型態 當類似的程式邏輯但是要傳入傳出不同的參數型態時就要宣告一大堆定義Function 用泛型的話就可以解決上述的問題

使用方式
程式組成有兩個程式檔案
GenericClass.cs          => 範例程式
GenericClass_Test.cs      => 執行的Unit Test

   GenericClass.cs 程式碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace GenericClass
{
    class MyGenericClass
    {
        private object aInstance; 
       // 以實體物件儲放樣版物件,測試樣版物件與實體物件的互通性。
        public void SetInstance<T>(T t)
        {
            aInstance = t; // 以實體儲放樣版。
        }
        //太重要了
        public T GetInstance<T>()
        {
            return (T)aInstance; // 自實體物件取回樣版物件。
        }


        public void Dump()
        {
            if (aInstance == null)
            {
                Console.WriteLine("aInstance is null.");
                return;
            }

            Type tp = aInstance.GetType();
            string dumpInfo = string.Format("MyTClass.Dump -> Type: {0}, ToString: {1}", tp.Name, aInstance.ToString());
            Console.WriteLine(dumpInfo);
        }
    }
}

   GenericClass_Test.cs程式碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using NUnit.Framework;
using Ionic.Zip;
using ObjectConverter.Tool;
using System.Data;
using GenericClass;

namespace ObjectConverter_Test
{
    [TestFixture]
    public class GenericClass_Test
    {
        [Test]
        public void ObjectConverter_Tool_Test()
        {
            //## C#泛型函式測試
            Console.WriteLine("## C#泛型函式測試");
            Show<int>(1);
            Show<string>("string1");

            //## 泛型類別傳遞參數測試
            Console.WriteLine("\r\n## 泛型類別傳遞參數測試");
            MyGenericClass tc = new MyGenericClass();

            tc.SetInstance<int>(3); // 以泛型傳入INT32
            tc.Dump();
            int ii = tc.GetInstance<int>(); // 以泛型取回INT32
            Console.WriteLine(ii);

            tc.SetInstance<string>("str3."); // 以泛型傳入String
            tc.Dump();
            string ss = tc.GetInstance<string>(); // 以泛型取回String
            Console.WriteLine(ss);

        }

        static void Show<T>(T t)
        {
            Console.Write("Show<T> -> ");
            Type tp = t.GetType();
            string info = string.Format("{0}, {1}", tp.Name, t.ToString());
            Console.WriteLine(info);
        }
    }
}

呈現結果
------ Test started: Assembly: GenericClassProject.dll ------

## C#泛型函式測試
Show<T> -> Int32, 1
Show<T> -> String, string1

## 泛型類別傳遞參數測試
MyTClass.Dump -> Type: Int32, ToString: 3
3
MyTClass.Dump -> Type: String, ToString: str3.
str3.

1 passed, 0 failed, 0 skipped, took 5.65 seconds (NUnit 2.5.5).

程式細部說明
下面將針對比較重要的程式碼部分做出說明

## C#泛型函式測試
上面的程式碼簡單的描述泛型是如何使用並且如何取得泛型的傳入傳出的變數型態

## 泛型類別傳遞參數測試
上面的程式碼簡單的說明如何使用泛型建立MyGenericClass
並使用該Class存取不同變數型態的變數

取自

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

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

https://adon988.logdown.com/posts/1203957


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);
    }
}