C# — μια σύγχρονη αντικειμενοστραφής γλώσσα προγραμματισμού από τη Microsoft, που αποτελεί τη βάση για τις πλατφόρμες Xamarin και .NET MAUI στην ανάπτυξη κινητών. Χάρη στο ενοποιημένο οικοσύστημα .NET, οι προγραμματιστές μπορούν να δημιουργούν εφαρμογές κινητών για iOS και Android χρησιμοποιώντας κοινό κώδικα σε C# και XAML. Σύμφωνα με τον δείκτη TIOBE (2026), η C# κατατάσσεται 4η σε δημοτικότητα μεταξύ όλων των γλωσσών προγραμματισμού. Περισσότερα στην τεκμηρίωση της Microsoft C#.
Κύρια Σημεία
C# (προφέρεται «σι σαρπ») — μια αντικειμενοστραφής γλώσσα προγραμματισμού με ασφαλές σύστημα τύπων, που αναπτύχθηκε από τη Microsoft το 2000 υπό την καθοδήγηση του Άντερς Χέιλσμπεργκ. Το όνομα εμπνέεται από τη μουσική σημειογραφία (δίεση — αύξηση του τόνου). Η C# λειτουργεί στην πλατφόρμα .NET, η οποία περιλαμβάνει το Common Language Runtime (CLR) και μια εκτεταμένη βιβλιοθήκη κλάσεων (BCL — Base Class Library).
Στην ανάπτυξη κινητών, η C# χρησιμοποιείται μέσω δύο τεχνολογιών: Xamarin (2011–2024) και του διαδόχου του .NET MAUI (2022+). Το Xamarin επέτρεπε τη δημιουργία native εφαρμογών Android και iOS με κοινό κώδικα C#, διαχωρίζοντας τα έργα πλατφόρμας. Το .NET MAUI ενώνει όλες τις πλατφόρμες σε ένα ενιαίο έργο με κοινή σήμανση XAML και πρόσβαση σε native API μέσω διεπαφών πλατφόρμας.
Βασικό χαρακτηριστικό της C# — αυστηρή στατική πληκτρολόγηση με δυνατότητα δυναμικής αποστολής μέσω dynamic, λέξη-κλειδί var (εξαγωγή τύπου) και ισχυρό σύστημα generics. Η C# είναι μια πλήρως διαχειριζόμενη γλώσσα: η μνήμη διαχειρίζεται από τον συλλέκτη σκουπιδιών (GC), τα όρια πινάκων ελέγχονται, οι μη αρχικοποιημένες μεταβλητές απαγορεύονται. Αυτό καθιστά την C# ασφαλέστερη από τη C++ με συγκρίσιμη απόδοση μέσω μεταγλώττισης AOT.
C# 1.0 (2000) — βασική γλώσσα OOP. C# 3.0 (2007) — LINQ, εκφράσεις λάμδα, extension methods. C# 6.0 (2015) — string interpolation, τελεστής null-conditional. C# 8.0 (2019) — nullable reference types (ενεργοποίηση ασφάλειας null), async streams, default interface methods. C# 10 (2021) — global usings, file-scoped namespaces, record struct. C# 12 (2023) — primary constructors, collection expressions, interceptors. Κάθε έκδοση φέρνει βελτιώσεις σχετικές με την ανάπτυξη κινητών.
| Έκδοση C# | Έτος | Βασικό Χαρακτηριστικό | Σημασία για Ανάπτυξη Κινητών |
|---|---|---|---|
| 3.0 | 2007 | LINQ, λάμδα | Απλοποιημένη εργασία με συλλογές και βάσεις δεδομένων |
| 6.0 | 2015 | ?. (null-conditional), string interpolation | Ασφαλής πρόσβαση σε ιδιότητες, ευανάγνωστα strings |
| 8.0 | 2019 | Nullable reference types, async streams | Ασφάλεια null, ασύγχρονες ροές δεδομένων |
| 10 | 2021 | Record struct, global usings | Τύποι τιμών, μείωση boilerplate |
| 12 | 2023 | Primary constructors, collection expressions | Συνοπτική γραφή κλάσεων και συλλογών |
Σύνταξη C# — παρόμοια με C, αυστηρά τυποποιημένη. Τα πάντα είναι αντικείμενο, συμπεριλαμβανομένων των πρωτόγονων τύπων (int, double, bool — είναι structs που κληρονομούν το ValueType). Η C# χωρίζει τους τύπους σε value types (int, double, bool, struct, enum — αποθηκεύονται στη στοίβα) και reference types (string, class, interface, delegate, array, record — αποθηκεύονται στο σωρό). Οι τύποι nullable (int?) επιτρέπουν null για value types.
C# υποστηρίζει κλάσεις (class), δομές (struct), εγγραφές (record), διεπαφές (interface), απαριθμήσεις (enum) και εκπροσώπους (delegate). record — ένας αμετάβλητος reference type με ισότητα βάσει τιμής (δύο record είναι ίσα αν όλα τα πεδία τους είναι ίσα). record struct — η έκδοση τιμής του record, που εισήχθη στην C# 10. primary constructors (C# 12) συνδυάζουν δήλωση και αρχικοποίηση σε μία γραμμή.
// Βασικοί τύποι και κλάσεις C#
using System;
using System.Collections.Generic;
// Εγγραφή με primary constructor (C# 12)
public record User(int Id, string Name, string Email);
// Κλάση με nullable ιδιότητες
public class AppConfig
{
public string AppName { get; init; }
public string? ApiUrl { get; set; } // nullable reference type
public int Version { get; init; }
// Μέθοδος με expression body
public string GetDisplayName() => $"{AppName} v{Version}";
}
// Extension method
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 με primary constructor δημιουργεί αυτόματα equals, hashCode, ToString, Deconstruct και with-αντιγραφή. Οι init-only setters (AppName) επιτρέπουν τον ορισμό τιμής μόνο στον αρχικοποιητή. Το expression body (=>) — συνοπτική γραφή για απλές μεθόδους. Η extension method IsValidEmail προσθέτει μέθοδο στο string χωρίς κληρονομικότητα.
LINQ — ενσωματωμένη γλώσσα ερωτημάτων για συλλογές, βάσεις δεδομένων, XML. LINQ to Objects — ερωτήματα σε συλλογές IEnumerable. LINQ to SQL — σε βάσεις δεδομένων. LINQ to XML — σε XML. Η σύνταξη μπορεί να είναι query (from u in users where u.Age > 18 select u) και method (users.Where(u => u.Age > 18).Select(u => u)). Τεμπέλικη φόρτωση (deferred execution): το ερώτημα εκτελείται κατά την επανάληψη, όχι κατά τη δήλωση.
// Ερωτήματα 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"),
};
// Σύνταξη query
var filteredUsers = from u in users
where u.Email.Contains("example")
orderby u.Name
select u;
// Σύνταξη method με πολλαπλές λειτουργίες
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 φιλτράρει χρήστες βάσει τομέα email και ταξινομεί βάσει ονόματος. Method syntax .Where().OrderBy().Select() — αλυσίδα μεθόδων, ισοδύναμη με query syntax. Το GroupBy ομαδοποιεί βάσει τομέα email. IAsyncEnumerable (C# 8) — ασύγχρονη έκδοση του IEnumerable, χρήσιμη για ροή δεδομένων σε εφαρμογή κινητού.
Xamarin (2011–2024) — η πρώτη πλατφόρμα της Microsoft για cross-platform ανάπτυξη κινητών σε C#. Αποτελούνταν από Xamarin.Android (Mono runtime πάνω από τον πυρήνα Linux) και Xamarin.iOS (μεταγλώττιση AOT σε ARM64 λόγω απαγόρευσης JIT στο iOS). Xamarin.Forms — κοινό επίπεδο UI με σήμανση XAML, μεταφράζοντας στοιχεία σε native (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 αντιστοιχίζεται σε ένα native component μέσω ενός handler πλατφόρμας.
<!-- 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 στο code-behind MainPage.xaml.cs.
// MainPage.xaml.cs — code-behind με λογική 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;
}
}Το code-behind της MainPage κληρονομεί από το ContentPage. Η InitializeComponent() φορτώνει τη σήμανση XAML. NameEntry.Text?.Trim() — τελεστής null-conditional (?.) για ασφαλή πρόσβαση. DisplayAlert — native διάλογος. ItemsView.ItemsSource — Binding σε συλλογή. async/await για ασύγχρονη φόρτωση. Η αρχιτεκτονική MVVM (Model-View-ViewModel) συνιστάται για σύνθετα έργα.
Ανάπτυξη κινητών με C# προσφέρει τρεις προσεγγίσεις: .NET MAUI (cross-platform UI), Xamarin (παλαιό) και Unity (παιχνίδια). .NET MAUI — συνιστώμενη διαδρομή για νέα έργα. Η εφαρμογή C# μεταγλωττίζεται σε Intermediate Language (IL), το οποίο το NativeAOT (.NET MAUI) ή το Mono (Xamarin) μετατρέπουν σε native κώδικα ARM. Το iOS απαιτεί μεταγλώττιση AOT — το JIT απαγορεύεται από τις πολιτικές της Apple.
.NET MAUI παρέχει ενοποιημένα API για εργασία με δυνατότητες πλατφόρμας μέσω διεπαφών: IAccelerometer, IBarometer, IBattery, IConnectivity, IDeviceInfo, IFilePicker, IGeolocation, IMediaPicker, IPermissions, ISpeechRecognizer, IVibration. Για κώδικα ειδικό για πλατφόρμα χρησιμοποιείται υπό όρους μεταγλώττιση (#if ANDROID, #if IOS) ή partial class.
// Γεωτοποθεσία σε .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) με nullable reference types. try-catch χειρίζεται εξαιρέσεις πλατφόρμας.
C# σε κινητές συσκευές εμφανίζει απόδοση συγκρίσιμη με Java/Kotlin σε Android και Swift σε iOS. Το NativeAOT (.NET 8+) μεταγλωττίζει την C# απευθείας σε native κώδικα χωρίς ενδιάμεσο στάδιο 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+ — ενοποιημένη πλατφόρμα για όλους τους τύπους εφαρμογών: κινητές, επιτραπέζιες, web, cloud, IoT, Παιχνίδια (Unity).
CLR — εικονική μηχανή που εκτελεί κώδικα CIL (Common Intermediate Language). C#, VB.NET, F# μεταγλωττίζονται σε CIL. Ο μεταγλωττιστής JIT του CLR μετατρέπει το CIL σε κώδικα μηχανής στην πρώτη κλήση της μεθόδου. Το NativeAOT (προ-μεταγλώττιση) μεταγλωττίζει το CIL σε native κώδικα στο στάδιο της δημιουργίας — ιδανικό για κινητές πλατφόρμες όπου το 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, εντοπιστή σφαλμάτων για διαχειριζόμενο και native κώδικα, προφίλ 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 (κωδικοί QR). .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 ενεργοποιεί το MAUI SDK. PackageReference — εξαρτήσεις από το NuGet. CommunityToolkit.Maui — στοιχεία UI (toast, snackbar, Popup). sqlite-net-pcl — τοπική βάση δεδομένων. Refit — τυποποιημένος πελάτης HTTP βασισμένος σε διεπαφές. dotnet build/publish δημιουργεί την εφαρμογή για όλες τις πλατφόρμες.
Συχνές Ερωτήσεις
C# — μια αντικειμενοστραφής γλώσσα προγραμματισμού από τη Microsoft (2000), που λειτουργεί στην πλατφόρμα .NET (CLR). Χρησιμοποιείται για ανάπτυξη κινητών μέσω Xamarin και .NET MAUI. Συνδυάζει αυστηρή στατική πληκτρολόγηση, αυτόματη διαχείριση μνήμης (GC), LINQ, async/await και generics. Κατατάσσεται 4η στον δείκτη TIOBE (2026). Αναπτύχθηκε από τον Άντερς Χέιλσμπεργκ.
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) μετατρέπουν σε native κώδικα ARM. Το Android χρησιμοποιεί Mono runtime (Xamarin) ή NativeAOT (.NET MAUI) για εκτέλεση IL. Το iOS απαιτεί μεταγλώττιση AOT — το JIT απαγορεύεται από την Apple. Το .NET MAUI παρέχει ενοποιημένα API για κάμερα, GPS, αισθητήρες με υλοποίηση πλατφόρμας μέσω διεπαφών.
C# χωρίζει τους τύπους σε value types (int, double, bool, char, struct, enum — στοίβα) και reference types (string, class, interface, array, delegate, record — σωρός). Οι τύποι nullable (int?) επιτρέπουν null για value types. record (C# 9) — αμετάβλητος reference type με ισότητα βάσει τιμής. 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. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης