C# เป็นภาษาโปรแกรมเชิงวัตถุสมัยใหม่จาก Microsoft ซึ่งเป็นพื้นฐานสำหรับแพลตฟอร์ม Xamarin และ .NET MAUI ในการพัฒนาโมบายล์ ด้วยระบบนิเวศ .NET ที่เป็นหนึ่งเดียว นักพัฒนาสามารถสร้างแอปพลิเคชันมือถือสำหรับ iOS และ Android โดยใช้โค้ด C# และ XAML ร่วมกัน ตามดัชนี TIOBE (2026) C# อยู่ในอันดับที่ 4 ในด้านความนิยมในบรรดาภาษาโปรแกรมทั้งหมด เรียนรู้เพิ่มเติมใน เอกสาร Microsoft C#
ประเด็นสำคัญ
C# (อ่านว่า "ซีชาร์ป") เป็นภาษาโปรแกรมเชิงวัตถุที่มีระบบชนิดที่ปลอดภัย พัฒนาโดย Microsoft ในปี 2000 ภายใต้การนำของ Anders Hejlsberg ชื่อนี้ได้รับแรงบันดาลใจจากสัญกรณ์ดนตรี (sharp — การเพิ่มระดับเสียง) C# ทำงานบนแพลตฟอร์ม .NET ซึ่งรวมถึง Common Language Runtime (CLR) และไลบรารีคลาสที่ครอบคลุม (BCL — Base Class Library)
ในการพัฒนาโมบายล์ C# ถูกใช้ผ่านสองเทคโนโลยี: Xamarin (2011–2024) และผู้สืบทอด .NET MAUI (2022+) Xamarin ทำให้สามารถสร้างแอปพลิเคชัน Android และ iOS แบบเนทีฟด้วยโค้ด C# ที่ใช้ร่วมกัน โดยแยกโปรเจกต์เฉพาะแพลตฟอร์ม .NET MAUI รวมทุกแพลตฟอร์มเป็นโปรเจกต์เดียวด้วยมาร์กอัป XAML ที่ใช้ร่วมกันและการเข้าถึง API เนทีฟผ่านอินเทอร์เฟซของแพลตฟอร์ม
คุณสมบัติหลักของ C# คือการกำหนดชนิดแบบสแตติกที่เข้มงวดพร้อมความสามารถในการจัดส่งแบบไดนามิกผ่าน dynamic คีย์เวิร์ด var (การอนุมานชนิด) และระบบเจเนอริกที่ทรงพลัง C# เป็นภาษาที่ถูกจัดการอย่างสมบูรณ์: หน่วยความจำถูกจัดการโดยตัวเก็บขยะ (GC), มีการตรวจสอบขอบเขตของอาร์เรย์, ตัวแปรที่ไม่ได้เริ่มต้นค่าเป็นสิ่งต้องห้าม สิ่งนี้ทำให้ C# ปลอดภัยกว่า C++ โดยมีประสิทธิภาพเทียบเท่าผ่านการคอมไพล์ AOT
C# 1.0 (2000) — ภาษา OOP พื้นฐาน C# 3.0 (2007) — LINQ, นิพจน์แลมบ์ดา, เมธดส่วนขยาย C# 6.0 (2015) — การแทรกสตริง, โอเปอเรเตอร์ null-conditional C# 8.0 (2019) — ชนิดอ้างอิงที่อนุญาตให้เป็น null (ความปลอดภัย null), สตรีมแบบอะซิงโครนัส, เมธดอินเทอร์เฟสเริ่มต้น C# 10 (2021) — global usings, เนมสเปซระดับไฟล์, record struct C# 12 (2023) — คอนสตรักเตอร์หลัก, นิพจน์คอลเล็กชัน, อินเตอร์เซปเตอร์ แต่ละเวอร์ชันนำการปรับปรุงที่เกี่ยวข้องกับการพัฒนาโมบายล์
| เวอร์ชัน C# | ปี | คุณสมบัติหลัก | ความสำคัญสำหรับการพัฒนาโมบายล์ |
|---|---|---|---|
| 3.0 | 2007 | LINQ, แลมบ์ดา | การทำงานที่ง่ายขึ้นกับคอลเล็กชันและฐานข้อมูล |
| 6.0 | 2015 | ?. (null-conditional), การแทรกสตริง | การเข้าถึงคุณสมบัติอย่างปลอดภัย, สตริงที่อ่านง่าย |
| 8.0 | 2019 | ชนิดอ้างอิงที่อนุญาตให้เป็น null, สตรีมแบบอะซิงโครนัส | ความปลอดภัย null, สตรีมข้อมูลแบบอะซิงโครนัส |
| 10 | 2021 | Record struct, global usings | ชนิดค่า, การลดโค้ดพื้นฐาน |
| 12 | 2023 | คอนสตรักเตอร์หลัก, นิพจน์คอลเล็กชัน | สัญกรณ์คลาสและคอลเล็กชันที่กระชับ |
ไวยากรณ์ C# คล้ายกับ C, มีการกำหนดชนิดอย่างเข้มงวด ทุกสิ่งเป็นออบเจ็กต์ รวมถึงชนิดพื้นฐาน (int, double, bool — เหล่านี้คือโครงสร้างที่สืบทอด ValueType) C# แบ่งชนิดเป็นชนิดค่า (int, double, bool, struct, enum — เก็บในสแต็ก) และชนิดอ้างอิง (string, class, interface, delegate, array, record — เก็บในฮีป) ชนิดที่อนุญาตให้เป็น null (int?) อนุญาตให้ null สำหรับชนิดค่า
C# รองรับคลาส (class), โครงสร้าง (struct), เรคคอร์ด (record), อินเทอร์เฟส (interface), การแจงนับ (enum) และเดลิเกต (delegate) record เป็นชนิดอ้างอิงที่ไม่เปลี่ยนสภาพพร้อมความเท่าเทียมตามค่า (เรคคอร์ดสองอันเท่ากันหากฟิลด์ทั้งหมดเท่ากัน) record struct เป็นเวอร์ชันค่าของ record เปิดตัวใน C# 10 คอนสตรักเตอร์หลัก (C# 12) รวมการประกาศและการเริ่มต้นค่าในบรรทัดเดียว
// ชนิดและคลาสพื้นฐานใน C#
using System;
using System.Collections.Generic;
// เรคคอร์ดกับคอนสตรักเตอร์หลัก (C# 12)
public record User(int Id, string Name, string Email);
// คลาสพร้อมคุณสมบัติที่อนุญาตให้เป็น null
public class AppConfig
{
public string AppName { get; init; }
public string? ApiUrl { get; set; } // nullable reference type
public int Version { get; init; }
// เมธดพร้อมเนื้อความนิพจน์
public string GetDisplayName() => $"{AppName} v{Version}";
}
// เมธดส่วนขยาย
public static class StringExtensions
{
public static bool IsValidEmail(this string email) =>
email.Contains("@") && email.Contains(".");
}
// การใช้งาน
var user = new User(1, "Alice", "alice@example.com");
bool validEmail = user.Email.IsValidEmail();เรคคอร์ด User กับคอนสตรักเตอร์หลักสร้าง equals, hashCode, ToString, Deconstruct และการคัดลอก with โดยอัตโนมัติ ตัวตั้งค่า init-only (AppName) อนุญาตให้ตั้งค่าได้เฉพาะในตัวเริ่มต้นเท่านั้น เนื้อความนิพจน์ (=>) เป็นสัญกรณ์ที่กระชับสำหรับเมธดอย่างง่าย เมธดส่วนขยาย IsValidEmail เพิ่มเมธดให้กับ string โดยไม่ต้องสืบทอด
LINQ เป็นภาษาสอบถามในตัวสำหรับคอลเล็กชัน, ฐานข้อมูล, XML LINQ to Objects — การสอบถามไปยังคอลเล็กชัน IEnumerable LINQ to SQL — ไปยังฐานข้อมูล LINQ to XML — ไปยัง XML ไวยากรณ์สามารถเป็นแบบสอบถาม (from u in users where u.Age > 18 select u) และแบบเมธด (users.Where(u => u.Age > 18).Select(u => u)) การโหลดแบบขี้เกียจ (การดำเนินการที่เลื่อนออกไป): การสอบถามจะดำเนินการเมื่อมีการวนซ้ำ ไม่ใช่เมื่อประกาศ
// การสอบถาม LINQ ไปยังคอลเล็กชัน
using System.Linq;
var users = new List<User>
{
new User(1, "Alice", "alice@example.com"),
new User(2, "Bob", "bob@test.com"),
new User(3, "Charlie", "charlie@example.com"),
};
// ไวยากรณ์แบบสอบถาม
var filteredUsers = from u in users
where u.Email.Contains("example")
orderby u.Name
select u;
// ไวยากรณ์แบบเมธดพร้อมหลายการดำเนินการ
var result = users
.Where(u => u.Email.Contains("example"))
.OrderBy(u => u.Name)
.Select(u => new { u.Name, u.Email })
.ToList();
// GroupBy และการรวมกลุ่ม
var emailsByDomain = users
.GroupBy(u => u.Email.Split('@')[1])
.Select(g => new { Domain = g.Key, Count = g.Count() });
// LINQ กับสตรีมแบบอะซิงโครนัส (IAsyncEnumerable)
await foreach (var user in GetUsersAsync())
{
Console.WriteLine(user.Name);
}
async IAsyncEnumerable<User> GetUsersAsync()
{
yield return new User(1, "Alice", "alice@example.com");
await Task.Delay(100);
yield return new User(2, "Bob", "bob@test.com");
}การสอบถาม LINQ filteredUsers กรองผู้ใช้ตามโดเมนอีเมลและเรียงตามชื่อ ไวยากรณ์แบบเมธด .Where().OrderBy().Select() เป็นลูกโซ่ของเมธดที่เทียบเท่ากับไวยากรณ์แบบสอบถาม GroupBy จัดกลุ่มตามโดเมนอีเมล IAsyncEnumerable (C# 8) เป็นเวอร์ชันอะซิงโครนัสของ IEnumerable มีประโยชน์สำหรับการโหลดข้อมูลแบบสตรีมในแอปพลิเคชันมือถือ
Xamarin (2011–2024) เป็นแพลตฟอร์มแรกของ Microsoft สำหรับการพัฒนาโมบายล์ข้ามแพลตฟอร์มใน C# ประกอบด้วย Xamarin.Android (Mono runtime บนเคอร์เนล Linux) และ Xamarin.iOS (การคอมไพล์ AOT เป็น ARM64 เนื่องจากการห้าม JIT บน iOS) Xamarin.Forms เป็นเลเยอร์ UI ที่ใช้ร่วมกันพร้อมมาร์กอัป XAML ซึ่งแปลองค์ประกอบเป็นแบบเนทีฟ (Android View / iOS UIView)
.NET MAUI (.NET Multi-platform App UI) เป็นผู้สืบทอดของ Xamarin เปิดตัวในปี 2022 หนึ่งโปรเจกต์ .csproj, หนึ่งมาร์กอัป XAML, หนึ่งจุดเข้า รองรับ 5 แพลตฟอร์ม: iOS, Android, Windows (WinUI 3), macOS (Mac Catalyst), Tizen .NET MAUI ใช้สถาปัตยกรรม Handler ใหม่แทน Renderer: แต่ละองค์ประกอบ XAML แมปไปยังคอมโพเนนต์เนทีฟผ่านตัวจัดการของแพลตฟอร์ม
<!-- MainPage.xaml — UI แบบประกาศของ .NET MAUI -->
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MyApp.MainPage">
<ScrollView>
<VerticalStackLayout Padding="30" Spacing="25">
<Label Text="Welcome to .NET MAUI!"
FontSize="32"
HorizontalOptions="Center"/>
<Entry x:Name="NameEntry"
Placeholder="Enter your name"/>
<Button Text="Submit"
Clicked="OnSubmitClicked"
BackgroundColor="#512BD4"
TextColor="White"
CornerRadius="8"/>
<CollectionView x:Name="ItemsView"
SelectionMode="Single">
<CollectionView.ItemTemplate>
<DataTemplate>
<Grid Padding="10">
<Label Text="{Binding Name}"
FontSize="18"/>
</Grid>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</VerticalStackLayout>
</ScrollView>
</ContentPage>มาร์กอัป XAML ของ .NET MAUI อธิบาย UI แบบประกาศ ScrollView — การเลื่อน, VerticalStackLayout — การจัดเรียงแนวตั้ง Label, Entry (การป้อนข้อความ), Button — องค์ประกอบพื้นฐาน CollectionView — รายการเสมือนจริงพร้อม DataTemplate สำหรับแสดงรายการ เหตุการณ์ Clicked ผูกกับเมธด OnSubmitClicked ในโค้ดเบื้องหลัง MainPage.xaml.cs
// MainPage.xaml.cs — โค้ดเบื้องหลังพร้อมตรรกะ C#
namespace MyApp;
public partial class MainPage : ContentPage
{
private readonly List<User> _users = new();
public MainPage()
{
InitializeComponent();
LoadUsers();
}
private async void OnSubmitClicked(object? sender, EventArgs e)
{
var name = NameEntry.Text?.Trim();
if (string.IsNullOrEmpty(name))
{
await DisplayAlert("Error", "Name is required", "OK");
return;
}
_users.Add(new User(_users.Count + 1, name, $"{name}@example.com"));
ItemsView.ItemsSource = null;
ItemsView.ItemsSource = _users;
NameEntry.Text = string.Empty;
}
private async void LoadUsers()
{
var apiService = new ApiService();
var users = await apiService.GetUsersAsync();
_users.AddRange(users);
ItemsView.ItemsSource = _users;
}
}โค้ดเบื้องหลัง MainPage สืบทอดจาก ContentPage InitializeComponent() โหลดมาร์กอัป XAML NameEntry.Text?.Trim() — โอเปอเรเตอร์ null-conditional (?.) สำหรับการเข้าถึงที่ปลอดภัย DisplayAlert — ไดอะล็อกแบบเนทีฟ ItemsView.ItemsSource — การผูกกับคอลเล็กชัน async/await สำหรับการโหลดแบบอะซิงโครนัส รูปแบบ MVVM (Model-View-ViewModel) แนะนำสำหรับโปรเจกต์ที่ซับซ้อน
การพัฒนาโมบายล์ด้วย C# มีสามแนวทาง: .NET MAUI (UI ข้ามแพลตฟอร์ม), Xamarin (แบบดั้งเดิม) และ Unity (เกม) .NET MAUI เป็นเส้นทางที่แนะนำสำหรับโปรเจกต์ใหม่ แอปพลิเคชัน C# ถูกคอมไพล์เป็น Intermediate Language (IL) ซึ่ง NativeAOT (.NET MAUI) หรือ Mono (Xamarin) แปลงเป็นโค้ด ARM แบบเนทีฟ iOS ต้องการการคอมไพล์ AOT — JIT ถูกห้ามโดยนโยบายของ Apple
.NET MAUI ให้ API แบบรวมศูนย์สำหรับทำงานกับความสามารถของแพลตฟอร์มผ่านอินเทอร์เฟส: IAccelerometer, IBarometer, IBattery, IConnectivity, IDeviceInfo, IFilePicker, IGeolocation, IMediaPicker, IPermissions, ISpeechRecognizer, IVibration สำหรับโค้ดเฉพาะแพลตฟอร์ม ใช้การคอมไพล์แบบมีเงื่อนไข (#if ANDROID, #if IOS) หรือคลาสบางส่วน
// การระบุตำแหน่งทางภูมิศาสตร์ใน .NET MAUI ด้วย DI
public class LocationService
{
private readonly IGeolocation _geolocation;
public LocationService(IGeolocation geolocation)
{
_geolocation = geolocation;
}
public async Task<Location?> GetCurrentLocation()
{
try
{
var permission = await CheckAndRequestPermission();
if (permission != PermissionStatus.Granted)
return null;
var location = await _geolocation.GetLastKnownLocationAsync();
if (location == null)
{
location = await _geolocation.GetLocationAsync(new GeolocationRequest
{
DesiredAccuracy = GeolocationAccuracy.Medium,
Timeout = TimeSpan.FromSeconds(10)
});
}
return location;
}
catch (Exception ex)
{
Debug.WriteLine($"ข้อผิดพลาดตำแหน่ง: {ex.Message}");
return null;
}
}
private async Task<PermissionStatus> CheckAndRequestPermission()
{
var status = await Permissions.CheckStatusAsync<Permissions.LocationWhenInUse>();
if (status != PermissionStatus.Granted)
{
status = await Permissions.RequestAsync<Permissions.LocationWhenInUse>();
}
return status;
}
}บริการ LocationService ใช้ DI (การฉีดพึ่งพาของ IGeolocation) CheckAndRequestPermission ตรวจสอบและขอสิทธิ์ระบุตำแหน่งทางภูมิศาสตร์ GetLastKnownLocationAsync — การตอบสนองที่รวดเร็ว (แต่ไม่แม่นยำเสมอไป), GetLocationAsync — การร้องขอพร้อมพารามิเตอร์ความแม่นยำและหมดเวลา การตรวจสอบ null (location == null) กับชนิดอ้างอิงที่อนุญาตให้เป็น null try-catch จัดการข้อยกเว้นของแพลตฟอร์ม
C# บนอุปกรณ์มือถือแสดงประสิทธิภาพที่เทียบได้กับ Java/Kotlin บน Android และ Swift บน iOS NativeAOT (.NET 8+) คอมไพล์ C# โดยตรงเป็นโค้ดเนทีฟโดยไม่มีขั้นตอน IL กลาง — ซึ่งลดเวลาเริ่มต้นลง 50% และลดการใช้หน่วยความจำ GC ใน .NET MAUI ถูกปรับให้เหมาะสมสำหรับแพลตฟอร์มมือถือด้วยการหยุดชั่วคราวสั้น ๆ (Workstation GC) ขนาด APK ประมาณ 20-30 MB (กับ NativeAOT)
| พารามิเตอร์ | Xamarin | .NET MAUI |
|---|---|---|
| สถาปัตยกรรม | Xamarin.Android + Xamarin.iOS | โปรเจกต์ .csproj เดียว |
| การเรนเดอร์ UI | Renderer (Xamarin.Forms) | Handler (.NET MAUI) |
| การคอมไพล์ | Mono JIT (Android), AOT (iOS) | NativeAOT (ทุกแพลตฟอร์ม) |
| สถานะ | โหมดบำรุงรักษา | การพัฒนาที่ใช้งานอยู่ |
| แพลตฟอร์ม | Android, iOS, Windows | Android, iOS, Windows, macOS, Tizen |
แพลตฟอร์ม .NET เป็นระบบนิเวศสำหรับการดำเนินการโค้ดที่ถูกจัดการ ซึ่งรวมถึง CLR (Common Language Runtime), BCL (Base Class Library), ASP.NET Core สำหรับพัฒนาเซิร์ฟเวอร์ และ .NET MAUI สำหรับแอปพลิเคชันมือถือ .NET 8+ เป็นแพลตฟอร์มแบบรวมศูนย์สำหรับแอปพลิเคชันทุกประเภท: มือถือ, เดสก์ท็อป, เว็บ, คลาวด์, IoT, เกม (Unity)
CLR เป็นเครื่องเสมือนที่ดำเนินการโค้ด CIL (Common Intermediate Language) C#, VB.NET, F# ถูกคอมไพล์เป็น CIL คอมไพเลอร์ JIT ของ CLR แปลง CIL เป็นโค้ดเครื่องในการเรียกเมธดครั้งแรก NativeAOT (การคอมไพล์ล่วงหน้า) คอมไพล์ CIL เป็นโค้ดเนทีฟในเวลาสร้าง — เหมาะสำหรับแพลตฟอร์มมือถือที่ JIT อาจถูกจำกัด (iOS)
ตัวเก็บขยะ GC ของ .NET เป็นแบบเจเนอเรชัน (เจเนอเรชัน 0, 1, 2) ปล่อยออบเจ็กต์ที่ไม่ใช้แล้วโดยอัตโนมัติ สำหรับแอปพลิเคชันมือถือ แนะนำให้ใช้ Workstation GC ที่มีการหยุดชั่วคราวน้อยที่สุด GC ทำงานในเธรดแยกต่างหาก โดยไม่บล็อกเธรด UI Background GC เป็นตัวเก็บขยะเบื้องหลังที่ลดการหยุดชั่วคราวสำหรับแอปพลิเคชันเชิงโต้ตอบ
เครื่องมือสำหรับนักพัฒนา C# รวมถึง Visual Studio, .NET SDK, dotnet CLI, NuGet, JetBrains Rider Visual Studio 2022 เป็น IDE หลักพร้อมตัวออกแบบ XAML, ตัวดีบักโค้ดที่ถูกจัดการและเนทีฟ, ตัววิเคราะห์ CPU/หน่วยความจำ .NET SDK รวมถึงคอมไพเลอร์ csc, dotnet CLI (dotnet new, dotnet build, dotnet publish, dotnet test)
NuGet เป็นตัวจัดการแพ็กเกจของ .NET คล้ายกับ npm สำหรับ JS มีมากกว่า 300,000 แพ็กเกจ รวมถึง CommunityToolkit.Maui (คอมโพเนนต์ UI), SQLite-net (ฐานข้อมูล), Firebase Cloud Messaging, ZXing.Net.Maui (คิวอาร์โค้ด) .NET MAUI Community Toolkit คือชุดของพฤติกรรม, ตัวแปลง, แอนิเมชันสำหรับเร่งการพัฒนา RestSharp และ Refit — ไคลเอ็นต์ HTTP Prism และ MVVM Community Toolkit — เฟรมเวิร์กทางสถาปัตยกรรม
<!-- .csproj — การกำหนดค่าโปรเจกต์ .NET MAUI -->
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net8.0-android;net8.0-ios;net8.0-maccatalyst</TargetFrameworks>
<OutputType>Exe</OutputType>
<UseMaui>true</UseMaui>
<ApplicationTitle>MyMAUIApp</ApplicationTitle>
<ApplicationId>com.example.mymauiapp</ApplicationId>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="CommunityToolkit.Maui" Version="9.0.0" />
<PackageReference Include="sqlite-net-pcl" Version="1.9.172" />
<PackageReference Include="Refit" Version="7.0.0" />
</ItemGroup>
</Project>ไฟล์ .csproj คือการกำหนดค่าโปรเจกต์ .NET MAUI TargetFrameworks ระบุแพลตฟอร์มเป้าหมาย UseMaui เปิดใช้งาน SDK MAUI PackageReference ระบุการพึ่งพาจาก NuGet CommunityToolkit.Maui ให้คอมโพเนนต์ UI (ทอสต์, สแน็กบาร์, Popup) sqlite-net-pcl คือฐานข้อมูลท้องถิ่น Refit คือไคลเอ็นต์ HTTP ที่กำหนดชนิดตามอินเทอร์เฟส dotnet build/publish สร้างแอปพลิเคชันสำหรับทุกแพลตฟอร์ม
คำถามที่พบบ่อย
C# เป็นภาษาโปรแกรมเชิงวัตถุจาก Microsoft (2000) ที่ทำงานบนแพลตฟอร์ม .NET (CLR) ใช้สำหรับการพัฒนาโมบายล์ผ่าน Xamarin และ .NET MAUI ผสมผสานการกำหนดชนิดแบบสแตติกที่เข้มงวด, การจัดการหน่วยความจำอัตโนมัติ (GC), LINQ, async/await และเจเนอริก อยู่อันดับที่ 4 ในดัชนี TIOBE (2026) พัฒนาโดย Anders Hejlsberg
Xamarin เป็นรุ่นก่อน (2011-2024) แยกโปรเจกต์เป็น Xamarin.Android และ Xamarin.iOS .NET MAUI (2022+) เป็นโปรเจกต์ .csproj เดียวพร้อมมาร์กอัป XAML ที่ใช้ร่วมกัน, สถาปัตยกรรม Handler แทน Renderer และรองรับ 5 แพลตฟอร์ม (iOS, Android, Windows, macOS, Tizen) Xamarin เข้าสู่โหมดบำรุงรักษา โปรเจกต์ใหม่ถูกสร้างบน .NET MAUI NativeAOT มีเฉพาะใน .NET MAUI
C# คอมไพล์เป็น CIL (Common Intermediate Language) ซึ่ง NativeAOT (.NET MAUI) หรือ Mono (Xamarin) แปลงเป็นโค้ด ARM แบบเนทีฟ Android ใช้ Mono runtime (Xamarin) หรือ NativeAOT (.NET MAUI) เพื่อดำเนินการ IL iOS ต้องการการคอมไพล์ AOT — JIT ถูกห้ามโดย Apple .NET MAUI ให้ API แบบรวมศูนย์สำหรับกล้อง, GPS, เซ็นเซอร์พร้อมการใช้งานตามแพลตฟอร์มผ่านอินเทอร์เฟส
C# แบ่งชนิดเป็นชนิดค่า (int, double, bool, char, struct, enum — สแต็ก) และชนิดอ้างอิง (string, class, interface, array, delegate, record — ฮีป) ชนิดที่อนุญาตให้เป็น null (int?) อนุญาตให้ null สำหรับชนิดค่า record (C# 9) — ชนิดอ้างอิงที่ไม่เปลี่ยนสภาพพร้อมความเท่าเทียมตามค่า record struct (C# 10) — เวอร์ชันค่า dynamic — การกำหนดชนิดแบบไดนามิก var — การอนุมานชนิดของคอมไพเลอร์
Visual Studio 2022 (Windows) และ Visual Studio for Mac — IDE หลักพร้อมตัวออกแบบ XAML, ตัวดีบักและตัววิเคราะห์ .NET SDK — คอมไพเลอร์ csc, dotnet CLI, MSBuild NuGet — ตัวจัดการแพ็กเกจ (มากกว่า 300,000) CommunityToolkit.Maui — คอมโพเนนต์ UI JetBrains Rider — IDE ทางเลือก การทดสอบ: xUnit, NUnit, Moq CI/CD: Azure DevOps, GitHub Actions
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ