สวัสดี C# .NET
Tags: dotnet, csharp
Published: 2021-06-01 01:43:00

ครั้งสุดท้ายที่เคยได้ใช้เครื่องมือของ Microsoft .NET คือปี 2006 ตอนนี้ 2021 เครื่องมือ .NET เปลี่ยนไปหมดแล้ว ข้อสำคัญคือ .NET runtime และ .NET SDK มีในทั้ง Windows, Linux และ macOS

.NET ก็ใช้เทคนิคเดียวกันกับ Java คือมี Runtime เพื่อรันภาษา byte code ของตัวเองไปเป็น native code ของแต่ละ platform ซึ่งในฝั่ง .NET มี CLR (Common Language Runtime) เทียบได้กับ JRE ของฝั่ง Java ส่วนการ packaging ในฝั่ง Java มี Jar ในฝั่ง .NET เรียก Assemblies

ตัว .NET runtime เองนั้นตอนนี้ก็รองรับการพัฒนาในอุปกรณ์หลายๆอย่างทั้ง ทำได้ทั้ง Desktop, Web, Mobile, IoT, AI/ML

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ojdd6d9t3e7ccnix0r3g.png)

การใช้งานตอนนี้ของ .NET ก็ดีขึ้นมาก โดยเมื่อติดตั้ง dotnet (โหลดติดตั้งในแต่ละ OS ได้จากที่นี่ https://aka.ms/dotnet-download ตอนนี้ version ล่าสุดที่ stable คือ .NET 5) ก็จะได้ทั้ง runtime ทั้ง SDK และมีคำสั่ง dotnet เอาไว้ให้ใช้งานง่ายๆทั้งสร้าง project ใหม่ และ รันง่ายๆผ่าน dotnet run 

มาเริ่ม Hello World ง่ายๆกัน

เริ่มจากสร้างโปรเจ็คสำหรับ console app โดยสั่ง

```
dotnet new console -n HelloWorld
```

dotnet new เป็น subcommand แล้วเราใส่ option console เพื่อบอก template ของโปรเจ็คที่จะสร้างว่าเป็นแบบ console application จากนั้นใส่ -n HelloWorld เพื่อระบุชื่อโปรเจ็ค

เมื่อรันแล้วจะได้ folder HelloWorld ออกมา ด้านในมีไฟล์แบบนี้

```
├── HelloWorld.csproj
├── Program.cs
├── bin
│   └── Debug
│       └── net5.0
│           └── ref
└── obj
    ├── Debug
    │   └── net5.0
    │       ├── HelloWorld.AssemblyInfo.cs
    │       ├── HelloWorld.AssemblyInfoInputs.cache
    │       ├── HelloWorld.GeneratedMSBuildEditorConfig.editorconfig
    │       ├── HelloWorld.assets.cache
    │       └── ref
    ├── HelloWorld.csproj.nuget.dgspec.json
    ├── HelloWorld.csproj.nuget.g.props
    ├── HelloWorld.csproj.nuget.g.targets
    ├── project.assets.json
    └── project.nuget.cache
```

ไฟล์ `HelloWorld.csproj` คือไฟล์ config ของ project ส่วน `Program.cs` คือไฟล์โค้ดภาษา C# ที่มี Main method อยู่ ส่วน `bin` กับ `obj` คือไฟล์ที่ถูกสร้างตอนที่เรา build project

มาดูกันใน `Program.cs` เราจะเห็นโค้ดแบบนี้

```csharp
using System;

namespace HelloWorld
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}
```

ซึ่งโครงสร้างของโปรแกรม C# เบื้องต้นคือมี class ใน class จะมี method อยู่ และเราจัดกลุ่ม class ได้ด้วย namespace เช่นโค้ดนี้มี class Program ที่มี method Main ถูกจัดอยู่ภายใต้ namespace HelloWorld

ส่วน `using System;` นั้นใช้เพื่อ import namespace อื่นในกรณีนี้คือ `System` ที่มีคลาส `Console` ทำให้เราเรียกใช้สั้นๆไม่ต้องใส่ชื่อ `System.Console` ทุกครั้ง

ใน Main method นั้นเราก็ทำการเรียก `Console.WriteLine("Hello World!");` เพื่อส่งสตริง `"Hello World!"` ออกไปแสดงที่หน้าจอ console นั่นเอง

เราสั่งรันได้โดยเรียก

```
% dotnet run
Hello World!
```

## สรุป
จากปี 2006 จนตอนนี้ 2021 เทคโนโลยีของ .NET ก็พัฒนาไปมากๆ การใช้งานจากตอนโน้นที่ต้องลง Visual Studio บน Windows เท่านั้นก็เปลี่ยนเป็นเครื่องมือที่มีทั้ง Runtime, SDK และ command line ง่ายๆให้ใช้ในทุก platform หลักทั้ง Windows, Linux และ macOS 

IDE อย่าง Visual Studio ก็ไม่ใช่ทางเลือกเดียวอีกต่อไป จะใช้ VS Code หรือใช้เครื่องมือของ JetBrains อย่าง JetBrains Rider ก็ได้

ภาษาหลักของ .NET ตอนนี้คือ C# และมีภาษาที่ติดมากับ SDK ด้วยเลยอีกสองคือ F# กับ Visual Basic

ด้วยความที่ .NET runtime นั้นมีเครื่องมือในการพัฒนา application ได้หลากหลาย platform ก็ทำให้เป็นตัวเลือกที่ดีตัวนึงในการใช้งาน ในหลายๆสถานการณ์เช่นกัน ดังนั้นใครยังไม่เคยลองหัด .NET และภาษาของ .NET อย่าง C# ก็ควรจะลองดูได้เช่นกันครับในยุคนี้ ถือว่าคุ้มต่อการลงทุนศึกษาอยู่เช่นกัน

## ขอฝาก Buy Me a Coffee
สำหรับท่านใดที่อ่านแล้วชอบโพสต์ต่างๆของผมที่นี่ ต้องการสนับสนุนค่ากาแฟเล็กๆน้อยๆ สามารถสนับสนุนผมได้ผ่านทาง Buy Me a Coffee คลิ๊กที่รูปด้านล่างนี้ได้เลยครับ

<a href="https://www.buymeacoffee.com/weerasak" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;" ></a>

ส่วนท่านใดไม่สะดวกใช้บัตรเครดิต หรือ Paypal สามารถสนับสนุนผมได้ผ่านทาง PromptPay โดยดู QR Code ได้จากโพสต์ที่พินเอาไว้ได้ที่ Page DevDose ครับ https://web.facebook.com/devdoseth