顯示具有 C# 標籤的文章。 顯示所有文章
顯示具有 C# 標籤的文章。 顯示所有文章

2025年5月5日 星期一

【讓GitHub Copilot更強大】GitHub Copilot擴充功能簡介-2




作者:許薰尹  精誠資訊/恆逸教育訓練中心資深講師



在《【讓GitHub Copilot更強大】GitHub Copilot擴充功能簡介-1》一文,介紹了GitHub Copilot 擴充功能,它是一個能讓 GitHub Copilot Chat 增加許多功能的工具,適合用於程式開發、查詢文件、AI輔助程式設計、資料檢索和執行特定操作等。這些擴充功能可以依據使用需求設為私有、公開並可分享,或在 GitHub Marketplace 上公開列出供大家下載。對於保護客戶資料的企業而言,可以選擇私有擴充功能來保障資訊僅在內部使用。若是小規模合作則可選擇公開並可分享的擴充功能,或將擴充功能上架至 GitHub Marketplace 以擴展影響力。


開發者可以使用 GitHub 提供的資源來自行設計 Copilot 擴充功能,其中包含程式碼範例、除錯工具、SDK 等。GitHub Codespaces 也支援在雲端設置和運行開發環境,並提供預先配置的工具如 Visual Studio Code,方便在不同設備上隨時隨地開發和協作。使用者可以建立一個簡單的 HTTP 伺服器,設定擴充功能的基本回應格式,並利用 createTextEvent 和 createDoneEvent 函數來控制回應流程。整合完成後,開發者可以進行測試,並調整連接埠的可見度設定為「Public」,確保外部應用程式可以正常訪問。


本篇文章將延續【讓GitHub Copilot更強大】GitHub Copilot擴充功能簡介-1文章的情境,介紹如何設計一個簡單的GitHub Copilot擴充功能。

2025年3月9日 星期日

【讓GitHub Copilot更強大】GitHub Copilot擴充功能簡介-1




作者:許薰尹  精誠資訊/恆逸教育訓練中心資深講師


GitHub Copilot Chat是一個超級聰明的聊天機器人,它可以幫你做很多程式開發相關的事情,而GitHub Copilot 擴充功能(GitHub Copilot Extensions)可以讓這個機器人裝上各種不同的工具,讓它變得更厲害!您可以使用 Copilot 擴充功能來擴展Copilot Chat 的能力 

2024年8月21日 星期三

【學長姐帶路】沒有IT背景,如何用4個月跨領域轉職程式設計師?




不要讓過去的學經歷,限制了你的夢想與未來
經驗、非本科系,也可以四個月成功轉職資訊業

2024.3月上課前,他們都沒有IT背景
2024.7月結業一個月內,他們都已成功轉職程式設計師
來看看微軟養成班學員的學習分享!

2024年5月28日 星期二

使用C#12 Primary Constructor 文/恆逸資深講師高光弘

什麼是Primary Constructor

Primary Constructor是C#的簡化建構函式宣告的語法,最早是用於Record 型別,宣告Record型別的時候,同時定義建構函式及屬性。
未使用Primary Constructor的寫法:

record Customer
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Customer(int id, string name)
    {
        Id = id;
        Name = name;
    }
}             

使用Primary Constructor的寫法:

record Customer(int Id, string Name);          

兩者之間,可以發現Primary Constructor的確能簡化不少程式碼,Id和Name並不是參數,而是屬性。Record型別大多用於DTO(Data Transfer Object)在定義建構函式的時候,能一起定義屬性,的確很適合。

C#12 Primary Constructor

在類別的部分C# 12也提供Primary Constructor。與 Record 語法相同的地方為宣告型別的時候,可以同時定義建構函式:

class Customer(int id, string name);         

不同的地方在於建構函式中的 id 和 name 不是屬性,而是參數。這些參數的範圍是涵蓋整個類別,類別內的方法和屬性是可以自由存取這些參數,而外部程式是無法存取這些參數,外部程式如果要存取參數,需另行宣告屬性:

class Customer(int id, string name) {
    public int Id { get; set; } = id;
    public string Name { get; set; }= name;
}               

在ASP.NET Core中使用Primary Constructor

ASP.NET Core的應用程式,廣泛地使用建構函式搭配Dependency Injection注入所需要的服務,如果搭配Primary Constructor應該可以簡化不少程式碼。

一般未使用Primary Constructor的程式碼:

public class HomeController : Controller
{
    readonly ILogger _logger;

    public HomeController(ILogger logger)
    {
        _logger = logger;
    }
}                      

使用Primary Constructor的程式碼:

在Index方法可以直接透過_logger參數來使用_ILogger服務。這個方式比較簡單,缺點是沒有限制唯讀
進一步將服務設定為唯讀的寫法:

除了要宣告Primary Constructor外,需要額外宣告唯讀欄位(Field),這個方式可以確保服務是唯讀。

由以上的應用程式實作得知,類別的Primary Constructor為什麼不直接宣告屬性的原因。因為搭配DI取得的服務,本來就不需要對外部程式直接開放自由存取,所以僅僅宣告類別層級的參數,但參數本身由於不具備唯讀的特性,如果想要進一步限制成唯讀,開發人員需要另行定義唯讀欄位取得服務。

 

2024年3月27日 星期三

使用Visual Studio Code設計ASP.NET Core Web API - 1

作者:許薰尹  精誠資訊/恆逸教育訓練中心資深講師




當您透過瀏覽器存取一個網站時,您看到的內容是由網站的伺服器使用 HTML、CSS 和 JavaScript 等技術和程式語言生成的。這些技術和程式語言使網站能夠呈現豐富的內容和互動體驗。


除了呈現內容之外,網站的伺服器還需要與用戶端進行溝通,以接收輸入和提供服務。例如,當您填寫一個註冊表單或點擊一個購物的產品按鈕時,您的瀏覽器會將這些資訊發送回伺服器。在傳統的 Web 開發中,這種溝通是透過 HTML 表單或 JavaScript 進行的。然而,隨著 Web 應用程式的發展,這種方式變得越來越不靈活。


Web API 是一種新的溝通方式,它允許伺服器與任何用戶端進行溝通,無論是瀏覽器、手機應用程式還是其他伺服器。Web API 使用 HTTP 協定和 JSON 或 XML 格式來交換資訊。
這種通訊方式具有許多優點,包括:


  • 靈活性:Web API 可以與任何用戶端進行溝通。
  • 可擴展性:Web API 可以輕鬆擴展以支持新的功能。
  • 可重用性:Web API 可以被多個應用程式使用。


使用 ASP.NET Core 建立 Web API

在本系列技術文章中,我們將介紹如何使用 ASP.NET Core Web API 來建立一個跨平台的 RESTful 服務。我們將使用 .NET CLI 進行專案的建立和管理,並透過 Visual Studio Code 開發工具來進行開發。

 ASP.NET Core 是 Microsoft 開發的開源 Web 開發框架。它可以讓您使用 .NET 和 C# 來建立跨平台的 Web 應用程式。ASP.NET Core Web API 是 ASP.NET Core 的一個擴充套件,它允許您使用 .NET 和 C# 來建立 RESTful 服務。

 

REST(Representational State Transfer)

使用HTTP建立API的常見方式是根據一個稱為REST(Representational State Transfer)的架構風格。REST利用大家熟悉的HTTP方法,向伺服器發送請求。具體來說,這些HTTP方法包括:

  •  GET:用於從Web服務取得資料。這相當於讀取操作。
  •  POST:用於在Web服務上建立新的資料項目。這可以看作是新增操作。
  •  PUT:用於在Web服務上更新已存在的資料項目。這相當於修改操作。
  •  PATCH:用於部分更新Web服務上的資料項目,它通過指定修改項目的方式來工作。
  •  DELETE:用於刪除Web服務上的資料項目。這相當於刪除操作。


符合REST原則的Web服務API被稱為RESTful API。它們主要通過以下元素定義:

  • 基底URI:這是API的根地址,所有的API請求都是以這個URI為基底。
  • HTTP方法:如GET、POST、PUT、PATCH和DELETE。
  • 資料的媒體類型:通常是JSON(JavaScript Object Notation)或XML,這決定了資料交換的格式。


在ASP.NET Core中建立API有多優點,這些優點使得ASP.NET Core成為開發現代Web API的強大平台,包括:

  • 序列化簡單:ASP.NET Core是為現代Web應用而設計的,它能夠自動地將您的類別序列化成JSON格式,這一點特別方便,因為JSON是現今Web通信中最常用的資料交換格式。這意味著您不需要寫很多額外的代碼來轉換資料的格式,ASP.NET Core框架會為您處理大部分工作。除此之外,對於有特殊需求的端點,您還可以自定義序列化過程。
  • 驗證和授權:ASP.NET Core支援業界標準的JSON Web Tokens (JWT) 和其他身份驗證機制。這讓開發者能夠輕鬆實施安全的API,確保只有授權用戶才能存取敏感資訊。
  • 預設使用HTTPS:HTTPS在保護Web通訊的過程中有非常關鍵的作用,ASP.NET Core將HTTPS設計成為預設的配置。這強化了API的安全性,確保資料在用戶端和伺服器之間的傳輸是加密的,從而保護了資料不被攔截或篡改。

 

使用 .NET HTTP REPL 測試 Web API

開發傳統網站時,通常我們會在網頁瀏覽器中檢視及測試程式是否正常。 因為Web API 會接受並傳回資料 (而非 HTML),因此,網頁瀏覽器不是最佳的 Web API 測試工具。
NET HTTP REPL 是一種命令列工具,它提供了一個互動式環境來發送 HTTP 請求到 Web API。它是專為測試和探索 Web API 而設計的,特別是在開發過程中,當你需要快速檢查API回應或進行手動測試時。由於 Web API 通常回傳 JSON 或 XML資料而非 HTML 內容,因此使用如.NET HTTP REPL 的工具會比傳統的網頁瀏覽器更加適合。

 
建立新的 Web API 專案

讓我們從建立專案開始,以.NET 8框架為範例。打開作業系統命令提示字元,並執行以下命令來建立一個新的 Web API 專案。首先建立專案資料夾「MyWebAPI」:
mkdir MyWebAPI
使用「cd」命令進入專案資料夾:
cd MyWebAPI
使用「dotnet new」命令建立一個新的 Web API 專案:

1
dotnet new webapi -controllers -f net8.0



使用Visual Studio Code開發工具開啟這個專案:

1
code .


以上步驟的執行結果,請參考下圖所示:




圖 1:建立Web API 專案。

 

2024年2月23日 星期五

ASP.NET Core Web API/Minimal API微服務開發實務範例、如何使用REST Client測試Minimal API





作者:高光弘
  精誠資訊/恆逸教育訓練中心資深講師



在現代軟體開發中,建立可靈活擴展且易於維護的應用程式是一個關鍵挑戰。為了滿足這些需求,許多開發者轉向微服務架構,並使用Web API/Minimal API作為開發和部署應用程式的實作手段。


Minimal API是一種以簡單、直觀的方式建立輕量級Web API的方法。相較於傳統的Web API,Minimal API更加精簡,減少了冗餘程式碼和配置,使開發者能夠專注於實現核心商業邏輯。


本文將介紹如何使用REST Client來測試Minimal API。REST Client是一個強大的工具,可以幫助開發人員模擬HTTP請求和回應,從而驗證API的正確性和可靠性。


2024年2月15日 星期四

【強大的AI程式設計助手】使用GitHub Copilot提高Coding生產力





作者:許薰尹  精誠資訊/恆逸教育訓練中心資深講師



當前,人工智慧的進步正在全面改變科技界的格局,並重新塑造世界運轉的模式,影響著各個組織和團隊的運作方式。若能充分善用這些人工智慧的進步,將如同催化劑般顯著提升全球開發人員的生產力。對於開發人員而言,將人工智慧的功能融入他們所熟悉的開發工具中,不僅能夠加強協同作業、開發、測試和部署產品的能力,更能以更快速、更有效率的方式完成這些任務。

 

GitHub Copilot 是由GitHubOpenAI合作開發的AI程式設計助手,旨在協助開發者更快、更高效地編寫程式碼。它支援多種程式語言和開發工具,並能自動生成程式碼建議。儘管它不斷學習並提供最新語法,程式設計師仍需檢視和調整生成的程式碼。

 

GitHub Copilot 是一項服務,能夠與所有熱門的程式設計語言搭配使用。在啟動不到兩年的時間內,已有46%的新程式碼是由人工智慧撰寫的,這顯著提高了整體開發人員的生產力,增加了55%。同時,有74%的開發人員表示能夠更專注於帶來滿足感的工作上。

 

GitHub Copilot 使用公開來源的自然語言和數十億行原始程式碼 (包括公用 GitHub 存放庫中的程式碼進行訓練,以了解您的專案之複雜細節,這可讓 GitHub Copilot 提供更多的內容感知建議。在使用 GitHub Copilot 的提示工程簡介中,您可以建置提示以讓GitHub Copilot生成實用的建議。這些提示是指導生成程式碼的指引或建議集合,有助於Copilot產生特定的回應。因此,GitHub Copilot輸出的品質取決於您如何建構這些提示,學習如何正確地下提示將會是一個相當重要的課題。

 

如果您有興趣使用GitHub Copilot,可參考本文的步驟開始使用。


2024年1月31日 星期三

.NET 8與C# 12新特性導覽

 

.NET 8與C# 12新特性導覽

羅慧真 Anita Lo

  • 精誠資訊/恆逸教育訓練中心-資深講師
  • 技術分類:程式設計





2023年11月微軟已正式公布 .NET 8 及 C# 12,每一次版本的更新都帶來更方便的語法、執行效能和跨越更多種平台類型 (例如.NET 7公布的.NET MAUI,寫一次程式可使用在 Windows、Andriod、iOS…. 等多種移動式平台),本篇文章將介紹C#12幾項亮眼的更新。

集合表達式

C# 傳統的陣列或集合語法,根據不同情況會有以下幾種不同的寫法:

string[] s1 = new string[] { "a", "b", "c" };
List<string> s2 = new() { "d", "e", "f" };
string[] s3 = Array.Empty<string>();
PrintArray(new string[] { "g", "h", "i" });

其實筆者常常被這[]、{}等符號搞得昏頭轉向的 …


C#12 集合運算式的目的是希望簡化此類語法,統一使用 [],當您使用 Visual Studio 2022 v17.8 以上的版本並開啟 .NET 8 專案時,編輯工具就會建議您使用集合運算式如下圖:



當然這只是建議,若您不理會這個建議,並不會產生編譯錯誤的情況。
以下程式是經過【使用集合運算式】修改之後的程式碼:

string[] s1 = ["a", "b", "c"];
List<string> s2 = ["d", "e", "f"];
string[] s3 = [];
PrintArray(["g", "h", "i"]);

另外,您也可以使用(散佈運算子) 將陣列/集合的元素複製到新的變數位置,語法如下:

string[] s5 = [.. s1, .. s2, .. s3];

列印結果:




主要建構函式

「主要建構函式」首次是出現在record類型,語法如下:

record Student(int id, string name) {
    public int ID { get; set; } = id;
    public string Name { get; set; } = name;
    public override string ToString()
    {
        return "$Student: {ID} -- {Name}";
    }
}

直接在定義類型名稱後面加上建構函式的括號,並指定其參數。


現在C# 12 可以使用在 class 、 struct 類型:

class Manufacturer (string ID, string CompanyName) {
    public string ID { get; set; } = ID;    
    public string CompanyName { get; set;} = CompanyName;

    public override string ToString() =>
         $"Manufacturer: {ID} -- {CompanyName}" ;
    
}

struct CreationDate (int year, byte month, byte day=1 { 
    public DateOnly Date{ get; set; } = new DateOnly(year, month, day);
    public int Year { get; set; } = year; 
    public byte Month { get; set; } = month;
    public byte Day { get; set; } = day;

    public override string ToString() => $"Birthday: {Date}";
    
}

using 別名可定義任何類型

using 別名用來簡化冗長的命名空間,但僅限於命名空間、類型 (類別、結構、泛型 …)

//基本使用方式
using System.Runtime.CompilerServices;
//namespace 的別名
using IO = System.IO;  
//class 的別名
using regex =  System.Text.RegularExpressions.Regex;
using dt = System.DateTime;
using ListString = System.Collections.Generic.List<string>;

C# 12 之後可以使用在更多種類型上:

//C#12 tuple 的別名
using moveTo = (int x, int y);
//C#12 Array
using stringArray = string[];

.NET 8 / C#12不僅只更新這些功能,而C#語法從3.0版到現在的12版已經有更多的改變,您的.NET目前停留在哪個版本啊?

新的一年,給自己新的目標,以下課程可以讓您攝取更多新技術的養分喔!


您可以在【UN492】.NET精粹的極致技術解密之旅 課程當中學到C#的多項重大更新,以及如何從傳統WPF、Windows Forms專案升級到.NET,此課程還將介紹背景工作服務與歷程紀錄(警告訊息、錯誤訊息的Log)以及應用程式的組態、部署與發佈,以幫助您掌握完整的應用程式開發流程。透過這些課程內容,您將能夠建立跨平台的應用程式,並學習使用各種相關的技術和工具,讓您能夠在開發應用程式的過程中更加得心應手。

另外,在跨平台方面可以參考【UN398】.NET MAUI跨界先鋒從桌面到移動的全平台開發旅程 課程,它的前身是由Xamarin.Forms演進而來。使用C#和XAML撰寫一次代碼即可建構可執行於Android、iOS、macOS、Windows上的App。此課程將使用C#、XAML及Visual Studio 2022開發.NET MAUI桌上與行動裝置的應用程式,您將學會如何使用XAML定義UI畫面,了解多種版面配置及使用者經驗,應用資源與樣式達到UI一致性及共享的特質,以及資料存取、WEB API的連結,具備硬體裝置的存取能力,最後知道如何將完成的App部署及預備。


您可在下列課程中了解更多技巧喔!

2021年2月7日 星期日

ASP.NET MVC架構教學,從入門到實務提升開發效率,推薦進修課程

 



想提升開發效率一定要會ASP.NET MVC!

從入門到實務,一次完整掌握ASP.NET MVC開發架構

ASP.NET Web Form的好處是提供了快速的開發能力,但是沒有一個良好的開發模式可供遵守,好上手但難以維護。
因此微軟重新設計新一代的網站開發技術ASP.NET MVC,採用MVC (Model、View、Controller) 設計模式,用來解決原本不足之處,提供多一個選擇,讓開發更有彈性、更有效率!