C#

Gjuha e Microsoft-it për aplikacione .NET, faqe me ASP.NET dhe lojëra me Unity — shumë e kërkuar në kompanitë e rajonit. · 103 terma

.csproj & .sln files

Skedarët .csproj dhe .sln

Skedari .csproj përshkruan një projekt C#: versionin e .NET-it dhe paketat NuGet. Një „solution“ (.sln) bashkon disa projekte — p.sh. aplikacionin, librarinë dhe testet.

.NET

.NET është platforma e Microsoft-it ku jeton C#: përmban runtime-in që e ekzekuton kodin dhe një librari të madhe të gatshme. Sot .NET-i është falas, me burim të hapur, dhe punon në Windows, macOS dhe Linux.

.NET MAUI

.NET MAUI të lejon të ndërtosh një aplikacion të vetëm me C# që punon në Android, iOS, Windows dhe macOS. Është pasardhësi i Xamarin-it.

Access modifiers in C# (internal)

Modifikuesit e qasjes në C#

Përveç public, private dhe protected, C#-i ka internal: e dukshme vetëm brenda të njëjtit projekt (assembly). Kështu një librari mund të ketë klasa ndihmëse që s'i shohin ata që e përdorin.

Anonymous types (new { })

Tipet anonime

Me new { Emri = "Arta", Nota = 5 } krijon një objekt pa pasur nevojë të shkruash klasë. Përdoret shumë me LINQ, kur të duhen vetëm disa fusha për pak kohë.

appsettings.json

appsettings.json është skedari i konfigurimit të aplikacioneve .NET: connection string-u i databazës, nivelet e log-ut, cilësimet e tua. Mund të kesh versione për çdo ambient (appsettings.Development.json). Sekretet mos i vendos këtu — përdor variablat e ambientit.

Arrays in C#

Vargjet në C#

Një varg në C# ka madhësi të fiksuar dhe elemente të të njëjtit tip: int[] notat = { 5, 4, 3 };. Ndryshe nga C-ja, C#-i e di gjatësinë (.Length) dhe të ndal me gabim po dole jashtë kufijve.

ASP.NET Core

ASP.NET Core është framework-u i Microsoft-it për të ndërtuar faqe dhe API me C#. Mund të shkruash një „minimal API“ me pak rreshta ose aplikacione të mëdha me kontrollerë dhe Razor Pages. Është shumë i shpejtë dhe përdoret nga bankat dhe kompanitë e mëdha.

ASP.NET Core Identity

ASP.NET Core Identity është sistemi i gatshëm për llogari përdoruesish: regjistrim, hyrje, fjalëkalime të hash-uara, konfirmim email-i dhe 2FA. Kështu s'e shkruan sigurinë nga zero.

Assemblies

Assembly-të në .NET

Kur ndërton një projekt C#, rezultati është një „assembly“ — një skedar .dll ose .exe me kod IL dhe informacion për tipet. Një projekt mund të përdorë assembly-të e projekteve të tjera ose të paketave NuGet.

async / await & Task (C#)

async dhe await në C#

Në C#, një metodë async kthen një Task (ose Task<T>), dhe me await pret rezultatin pa e bllokuar programin — p.sh. ndërsa shkarkon diçka nga interneti, dritarja mbetet e gjallë.

Attributes ([...])

Atributet në C#

Atributet janë shënime në kllapa katrore sipër klasave, metodave ose vetive — [Obsolete], [HttpGet], [Required]. Vetë s'e ndryshojnë kodin, por kompajleri dhe framework-et i lexojnë dhe veprojnë sipas tyre.

AutoMapper

AutoMapper-i i kopjon vetë vetitë me të njëjtin emër nga një objekt te një tjetër — p.sh. nga entiteti i databazës te një DTO që i dërgohet klientit. Kursen shumë rreshta të mërzitshëm.

base & this (C#)

base i referohet klasës prind: me : base(emri) thërret konstruktorin e prindit, dhe me base.Metoda() përdor versionin e tij. this i referohet objektit aktual. Është si super në Java.

Blazor

Blazor-i të lejon të ndërtosh faqe interaktive me C# në vend të JavaScript-it — komponentët shkruhen në skedarë .razor që përziejnë HTML dhe C#. Mund të ekzekutohet në shfletues (me WebAssembly) ose në server.

C#

C# (lexohet „si sharp“) është një gjuhë programimi e Microsoft-it. Përdoret për aplikacione Windows, për backend me .NET dhe për lojëra me Unity.

C# & .NET versions

Versionet e C# dhe .NET

C#-i dhe .NET-i dalin me version të ri çdo nëntor. Versionet çift (.NET 8, .NET 10) janë LTS — mbështeten 3 vjet — prandaj kompanitë zakonisht i zgjedhin ato. Çdo version i C#-it shton veçori që e bëjnë kodin më të shkurtër.

C# data types (int, double, bool, char)

Tipet e të dhënave në C#

C#-i ka tipe bazë si int (numra të plotë), long (numra të mëdhenj), double (me presje), decimal (para), bool (true/false), char (një shkronjë) dhe string (tekst). Çdo variabël e ka tipin e fiksuar.

C# IDEs (Visual Studio, Rider, VS Code)

IDE për C#

Për C# përdoren kryesisht Visual Studio (Community është falas, në Windows), JetBrains Rider (në të gjitha sistemet) dhe VS Code me shtesën C# Dev Kit. Të gjitha kanë debugger, plotësim kodi dhe mjete për testet.

CancellationToken

CancellationToken i lejon një pune async të ndalet në mes — p.sh. kur përdoruesi klikon „Anulo“ ose kalon kohëzgjatja. Ia jep tokenin metodës, dhe ajo e kontrollon herë pas here.

Classes & objects in C#

Klasat dhe objektet në C#

Në C#, një class është plani dhe me new krijon objekte prej tij. Klasa ka fusha, veti, metoda dhe konstruktorë. Pothuajse çdo gjë në C# jeton brenda një klase.

CLR & IL

Kodi C# s'kthehet direkt në kod makine: kompajleri e kthen në IL (Intermediate Language), dhe CLR-ja (Common Language Runtime) e ekzekuton, duke e përkthyer me JIT në kod makine sapo nevojitet. Është si bytecode-i dhe JVM-ja te Java.

Console.WriteLine & ReadLine

Shkrimi dhe leximi në konsolë

Console.WriteLine() shfaq një rresht teksti në konsolë, ndërsa Console.ReadLine() lexon atë që shkruan përdoruesi (gjithmonë si tekst). Për numra, e kthen me int.Parse() ose më mirë int.TryParse().

const & readonly (C#)

const dhe readonly

const është konstante që dihet që gjatë kompajlimit (const int MAX = 30;). readonly vendoset një herë — në deklarim ose në konstruktor — dhe s'ndryshon më. init në vetitë lejon vendosjen vetëm gjatë krijimit të objektit.

Constructors in C#

Konstruktorët në C#

Konstruktori ekzekutohet kur krijon një objekt me new dhe e përgatit atë. Në C# modern, „primary constructor“ i vendos parametrat direkt te emri i klasës: class Lojtar(string emri).

Controllers (ASP.NET Core)

Kontrollerët në ASP.NET

Një controller në ASP.NET Core është një klasë që i trajton kërkesat për një pjesë të API-së: [HttpGet] lidh një metodë me një adresë, dhe vlera që kthen bëhet JSON vetvetiu. Është „C“-ja te MVC.

Coroutines in Unity (StartCoroutine)

Korutinat në Unity

Në Unity, një korutinë është një metodë IEnumerator që mund të „presë“ me yield return — p.sh. new WaitForSeconds(2) — pa e ngrirë lojën. E nis me StartCoroutine(). E dobishme për numërime mbrapsht dhe animacione.

Custom exceptions (C#)

Përjashtimet e tua në C#

Krijon gabimin tënd duke trashëguar nga Exception: class BilancMungonException : Exception. Emri i qartë e bën kodin të kuptueshëm, dhe mund ta kapësh pikërisht atë gabim.

Dapper

Dapper-i është një „mikro-ORM“ për .NET: ti e shkruan SQL-në vetë, dhe ai i kthen rezultatet direkt në objekte C#. Shumë më i shpejtë dhe më i thjeshtë se Entity Framework, por me më pak automatizim.

DateTime & TimeSpan

Datat në C#

DateTime mban datë dhe orë, TimeSpan një kohëzgjatje, dhe DateOnly vetëm datën. Mund të shtosh ditë, të zbresësh data dhe ta formatosh: sot.ToString("dd.MM.yyyy").

decimal (money in C#)

Tipi decimal

decimal është tipi i C#-it për para: i ruan saktë numrat dhjetorë, ndryshe nga double-i (ku 0.1 + 0.2 s'është saktësisht 0.3). Numrat decimal shkruhen me m në fund: 19.99m.

Delegates

Delegatët

Një delegat është një tip që mban një referencë drejt një metode — si pointer-i i funksionit në C, por i sigurt. Func<> dhe Action<> janë delegatët e gatshëm që përdor më shpesh.

Dependency injection

Injektimi i varësive

Dependency injection do të thotë që një klasë s'i krijon vetë gjërat që i duhen (databazën, shërbimin e email-it) — ia jep dikush tjetër përmes konstruktorit. Kështu klasat janë më të pavarura dhe më të lehta për t'u testuar. ASP.NET Core e ka të integruar.

Dictionary<TKey, TValue>

Fjalori në C#

Dictionary ruan çifte çelës–vlerë dhe e gjen vlerën shumë shpejt sipas çelësit. Me TryGetValue() e kontrollon pa gabim nëse një çelës ekziston.

dotnet CLI

Komanda dotnet në terminal i bën të gjitha: dotnet new console krijon projekt të ri, dotnet run e ekzekuton, dotnet build e ndërton, dotnet test ekzekuton testet dhe dotnet add package shton paketa.

EF Core migrations

Migrimet në EF Core

Kur ndryshon klasat e Entity Framework-ut, një migrim i shkruan ato ndryshime si hapa për databazën. dotnet ef migrations add krijon migrimin, dhe dotnet ef database update e zbaton.

Entity Framework Core

Entity Framework Core është ORM-ja e .NET-it: tabelat e databazës i trajton si klasa C#, dhe query-t i shkruan me LINQ në vend të SQL-së. Me migrime, ndryshimet në klasa kalojnë vetë në databazë.

enum in C#

enum në C#

Një enum në C# është një listë vlerash me emër: enum Dita { Hene, Marte, ... }. Me atributin [Flags], një enum mund të kombinojë disa vlera njëkohësisht.

Equality in C# (==, Equals)

Barazia në C#

Për klasat, == kontrollon nëse janë i njëjti objekt; për string-ët dhe record-et krahason vlerën. Për t'i krahasuar klasat e tua sipas vlerës, mbishkruaj Equals() dhe GetHashCode() — ose thjesht përdor record.

Events in C#

Ngjarjet në C#

Ngjarjet (event) i lejojnë një objekti t'u njoftojë të tjerët kur ndodh diçka — p.sh. kur klikohet një buton. Të tjerët „regjistrohen“ me += dhe largohen me -=.

Exceptions in C# (try, catch, finally)

Përjashtimet në C#

Në C# i kap gabimet me try/catch, dhe finally ekzekutohet gjithmonë, me apo pa gabim. Kap gabime specifike (FormatException, IOException) para atyre të përgjithshme (Exception), dhe hedh të tuat me throw.

Extension methods

Metodat shtesë

Metodat shtesë të lejojnë t'i „shtosh“ metoda një klase që s'është e jotja — p.sh. string-ut — pa e ndryshuar. Shkruhen si metoda static me this para parametrit të parë. Gjithë LINQ-u është ndërtuar kështu.

File I/O in C# (File class)

Skedarët në C#

Klasa File e bën punën me skedarë shumë të lehtë: File.ReadAllText(), File.ReadAllLines(), File.WriteAllText() dhe File.AppendAllText() — secila në një rresht. Për skedarë të mëdhenj, StreamReader lexon rresht pas rreshti.

foreach (C#)

foreach kalon nëpër çdo element të një koleksioni pa numërues: foreach (var nota in notat). S'mund ta ndryshosh koleksionin brenda ciklit — po ta bëje, merr gabim.

GameObject & components (Unity)

GameObject-et dhe komponentët

Në Unity, çdo gjë në skenë është një GameObject — lojtari, topi, kamera. Ai vetë s'bën asgjë; aftësitë ia japin komponentët: Transform (pozicioni), Rigidbody (fizika), Collider (përplasjet) dhe skriptet e tua.

Generics in C# (<T>)

Gjenerikët në C#

Gjenerikët të lejojnë të shkruash një klasë ose metodë që punon me çdo tip — List<int>, List<string>. Me where T : vendos kufizime, p.sh. T duhet të jetë klasë ose të zbatojë një interfejs.

global using & file-scoped namespaces

global using System.Text.Json; e vendos një using për gjithë projektin, që mos ta përsërisësh në çdo skedar. namespace Fjalori; (me pikëpresje) e zbaton namespace-in për gjithë skedarin pa kllapa shtesë.

Godot (with C#)

Godot-i është një motor lojërash falas dhe me burim të hapur, që mbështet GDScript-in dhe C#-in. Është i lehtë, i shpejtë për t'u mësuar dhe shumë i dashur nga zhvilluesit indie.

Hot reload (dotnet watch)

Hot reload të lejon të ndryshosh kodin ndërsa aplikacioni po punon dhe t'i shohësh ndryshimet menjëherë, pa e rinisur. Në .NET e ndez me dotnet watch; në web, Vite dhe Next.js e bëjnë vetë.

HttpClient

HttpClient është mënyra e C#-it për të bërë kërkesa HTTP — për të marrë të dhëna nga një API ose për të dërguar formularë. Me GetFromJsonAsync<T>() merr dhe e kthen JSON-in në objekt me një rresht.

IEnumerable & yield

IEnumerable<T> është çdo gjë që mund ta kalosh me foreach — lista, vargje, rezultatet e LINQ-ut. Me yield return krijon një sekuencë që i jep elementet një nga një, vetëm kur kërkohen.

ILogger (logging in .NET)

Log-et në .NET

Në .NET, mesazhet e log-ut shkruhen me ILogger, që merret me dependency injection: _log.LogInformation("Porosia {Id} u krijua", id). Libraria Serilog i dërgon log-et në skedarë, databaza ose shërbime cloud.

Inheritance in C# (: Base)

Trashëgimia në C#

Në C#, një klasë trashëgon me dy pika: class Portier : Lojtar. Mund të ketë vetëm një klasë prind, por shumë interfejsa. Metodat e prindit mund të mbishkruhen vetëm nëse janë virtual.

Interfaces in C# (IName)

Interfejsat në C#

Në C#, interfejsat fillojnë me I sipas zakonit — IComparable, IDisposable — dhe tregojnë çfarë metodash duhet të ketë një klasë. Një klasë trashëgon nga një klasë e vetme, por mund të zbatojë shumë interfejsa.

is & as operators

Operatorët is dhe as

is kontrollon nëse një objekt është i një tipi (dhe mund ta nxjerrë në variabël: if (k is Qen q)). as provon ta konvertojë dhe jep null nëse s'mundet, në vend që të hedhë gabim.

Lambda expressions (C#)

Shprehjet lambda në C#

Lambda-t në C# janë funksione të shkurtra pa emër, me shigjetën =>: n => n * 2. Ruhen në tipe si Func<int, int> (kthen vlerë) ose Action (s'kthen), dhe përdoren gjithandej me LINQ.

LINQ

LINQ-u të lejon të kërkosh, filtrosh, renditësh dhe grupuosh koleksione me metoda si Where, Select, OrderBy dhe Count — pothuajse si SQL, por brenda C#-it. Punon me lista, databaza dhe XML njësoj.

LINQ query syntax (from ... select)

Sintaksa query e LINQ-ut

LINQ-u ka dy forma: me metoda (.Where().Select()) dhe me sintaksë që duket si SQL: from n in nxenesit where n.Nota == 5 select n.Emri. Të dyja bëjnë të njëjtën gjë — zgjidh atë që lexohet më mirë.

List<T>

List<T> është lista që rritet vetë në C# — si ArrayList-i i Java-s ose vector-i i C++. Shton me Add(), heq me Remove(), numëron me Count, dhe e kalon me foreach.

lock statement (C#)

lock (objekt) { ... } lejon vetëm një thread në një kohë brenda bllokut. E mbron një variabël të përbashkët nga race condition — si synchronized i Java-s.

Loops in C# (for, while, do)

Ciklet në C#

C#-i ka cikle for (me numërues), while (derisa një kusht është true), do-while (të paktën një herë) dhe foreach (për koleksione). break del nga cikli, continue kalon te hapi tjetër.

Math class (C#)

Klasa Math në C#

Klasa static Math ka funksione matematikore: Math.Round(), Math.Sqrt(), Math.Pow(), Math.Abs(), Math.Max() dhe Math.Clamp() që e mban një vlerë brenda kufijve.

Methods in C#

Metodat në C#

Një metodë në C# ka tipin e kthimit, emrin dhe parametrat: int Mblidh(int a, int b) => a + b;. void do të thotë që s'kthen asgjë. Metodat e shkurtra shkruhen me => (expression-bodied).

Middleware

Middleware-et janë hapa që çdo kërkesë HTTP i kalon një nga një para se të arrijë te kodi yt — p.sh. log-imi, kontrolli i hyrjes, kompresimi. Në ASP.NET Core dhe Express i shton me app.Use...().

MonoBehaviour (Unity scripts)

Skriptet e Unity-t

Në Unity, çdo skript që i ngjitet një objekti të lojës trashëgon nga MonoBehaviour. Start() ekzekutohet një herë kur fillon loja, dhe Update() çdo kuadër (dhjetëra herë në sekondë) — aty lexon tastierën dhe lëviz personazhin.

Moq

Moq-u krijon objekte „false“ (mock) për teste në .NET: zëvendëson databazën ose shërbimin e email-it me një version të kontrolluar, që ta testosh vetëm kodin tënd.

Multidimensional & jagged arrays (C#)

Vargjet shumëdimensionale në C#

C#-i ka dy lloje vargjesh me shumë dimensione: int[,] (tabelë drejtkëndëshe, a[1, 2]) dhe int[][] (varg vargjesh, ku çdo rresht mund të ketë gjatësi tjetër, a[1][2]).

NuGet

NuGet-i është dyqani i paketave për .NET — si npm-ja për JavaScript ose pip-i për Python. Me dotnet add package Newtonsoft.Json shton një librari në projektin tënd, dhe ajo regjistrohet te skedari .csproj.

Nullable types (int?, ?., ??)

Tipet që lejojnë null

Në C#, një int s'mund të jetë null, por një int? po. Operatori ?. e thërret një metodë vetëm nëse objekti s'është null, dhe ?? jep një vlerë rezervë. Projektet e reja paralajmërojnë kur një string mund të jetë null.

Object initializers

Inicializuesit e objekteve

Me inicializuesit e objekteve krijon një objekt dhe i jep vlerat e vetive në një hap të vetëm, me kllapa gjarpër — pa pasur nevojë për konstruktor me shumë parametra.

Optional & named parameters

Parametrat opsionalë dhe me emër

Në C#, një parametër mund të ketë vlerë të paracaktuar (int nota = 5), dhe kur e thërret metodën mund t'i japësh argumentet sipas emrit (nota: 4), në çfarëdo radhe.

out & ref parameters

Parametrat out dhe ref

Me ref, një metodë merr variablën origjinale (jo kopje) dhe mund ta ndryshojë. Me out, metoda detyrohet t'i japë vlerë — kështu kthen më shumë se një rezultat, si te int.TryParse(tekst, out int numri).

Parallel & PLINQ

Parallel.For dhe Parallel.ForEach e ndajnë një cikël mes të gjitha bërthamave të procesorit. PLINQ (.AsParallel()) bën të njëjtën gjë me query-t LINQ. Shumë më shpejt për llogaritje të rënda.

params

Me params, një metodë pranon sa argumente të duash të të njëjtit tip dhe i sheh si varg. Console.WriteLine dhe string.Join e përdorin këtë.

Parse, TryParse & Convert

Konvertimi i tekstit në numër në C#

Çdo gjë nga Console.ReadLine() është tekst. int.Parse() e kthen në numër por hedh gabim nëse s'është numër; int.TryParse() kthen true/false dhe s'rrëzon kurrë programin — përdore atë për hyrjen e përdoruesit.

partial classes

Klasat e pjesshme

partial të lejon ta ndash një klasë në disa skedarë. Përdoret shpesh kur një pjesë e kodit krijohet automatikisht (p.sh. nga dizajneri i formave) dhe pjesën tjetër e shkruan ti — pa e prekur njëra-tjetrën.

Prefabs (Unity)

Një prefab është një GameObject i ruajtur si shabllon — p.sh. një armik ose një monedhë. Me Instantiate() krijon sa kopje të duash gjatë lojës, dhe po ndryshove prefab-in, ndryshojnë të gjitha.

Properties (get; set;)

Vetitë në C#

Vetitë (properties) në C# duken si fusha, por nga brenda janë metoda get dhe set. { get; set; } krijon një veti automatike në një rresht; kur të duhet, i shton rregulla — p.sh. mosha s'mund të jetë negative.

Queue<T>, Stack<T> & HashSet<T>

Përveç List dhe Dictionary, C#-i ka Queue<T> (radha: Enqueue/Dequeue), Stack<T> (pirgu: Push/Pop) dhe HashSet<T> (vlera unike, kërkim i shpejtë).

Random (C#)

Numrat e rastësishëm në C#

Random.Shared.Next(1, 7) jep një numër nga 1 te 6 (kufiri i sipërm s'përfshihet). Për lojëra dhe kuize; për fjalëkalime dhe siguri përdoret RandomNumberGenerator.

Records (C#)

record-et në C# janë klasa të shkurtra për të dhëna: krahasohen sipas vlerave (jo sipas adresës), kanë ToString() të bukur, dhe me with krijon një kopje me disa ndryshime.

Reflection

Reflektimi

Reflection-i i lejon një programi ta „shohë veten“ gjatë ekzekutimit: cilat klasa, veti dhe metoda ka, cilat atribute mbajnë — dhe t'i thërrasë sipas emrit. Framework-et si ASP.NET dhe Entity Framework e përdorin shumë.

Rigidbody & physics (Unity)

Fizika në Unity

Rigidbody-ja i jep një objekti fizikë reale — gravitet, shpejtësi, përplasje. Collider-i i jep formën për përplasjet, dhe OnCollisionEnter() ekzekutohet kur dy objekte përplasen.

sealed

sealed e ndalon një klasë që të trashëgohet më tej (ose një metodë që të mbishkruhet më). Përdoret kur nuk do që dikush ta ndryshojë sjelljen e saj. Është si final-i i Java-s.

SignalR

SignalR-i është libraria e ASP.NET Core për komunikim në kohë reale: serveri u dërgon mesazhe menjëherë shfletuesve të lidhur — për chat, njoftime ose rezultate live. Nga brenda përdor WebSocket-e kur mundet.

Span<T>

Span<T> është një „dritare“ mbi një pjesë të një vargu ose memorie, pa e kopjuar. Përdoret për kod shumë të shpejtë që përpunon të dhëna ose tekst pa krijuar objekte të reja.

static class (C#)

Klasat statike në C#

Një klasë static s'mund të ketë objekte — të gjitha metodat dhe fushat i përkasin vetë klasës. Përdoret për mjete ndihmëse, si Math ose Console: thërret Math.Max(a, b) pa krijuar asnjë objekt.

String interpolation ($"")

Interpolimi i tekstit në C#

Me $ para thonjëzave, mund t'i fusësh variablat direkt në tekst brenda kllapave gjarpër: $"Tung, {emri}!". Mund t'i formatosh edhe — {cmimi:F2} jep dy shifra pas presjes.

String methods (C#)

Metodat e string-ut në C#

string-u në C# ka metoda si Length, Substring(), Contains(), Split(), Replace(), ToUpper() dhe Trim(). Asnjëra s'e ndryshon origjinalin — kthejnë një string të ri.

string.IsNullOrEmpty / IsNullOrWhiteSpace

string.IsNullOrWhiteSpace(s) kontrollon me një thirrje nëse një tekst është null, bosh ose vetëm hapësira — ideale për të validuar fushat e formularit.

Swagger & OpenAPI

OpenAPI është një standard për të përshkruar një API: cilat adresa ka, çfarë pranojnë dhe çfarë kthejnë. Swagger UI e kthen këtë në një faqe ku i sheh dhe i provon endpoint-et me klik. ASP.NET Core dhe FastAPI e krijojnë vetë.

switch expressions & pattern matching

Shprehjet switch në C#

C#-i modern ka një switch të shkurtër që kthen vlerë, dhe „pattern matching“ që kontrollon tipin dhe vlerat njëkohësisht — p.sh. pike switch { >= 90 => "5", >= 75 => "4", _ => "Provo sërish" }.

System.Text.Json

JSON në C#

System.Text.Json është libraria e integruar e .NET-it për JSON: JsonSerializer.Serialize() e kthen një objekt në JSON, dhe Deserialize<T>() e kthen JSON-in në objekt. Newtonsoft.Json është alternativa e vjetër e njohur.

Top-level statements

Urdhrat në nivelin e lartë

Dikur çdo program C# kërkonte një klasë Program me static void Main(). Që nga C# 9, mund të shkruash kodin direkt në Program.cs, pa klasë dhe pa Main — kompajleri i krijon vetë. Programi „Hello World“ është vetëm një rresht.

Tuples (C#)

Tuple-t në C#

Tuple-t në C# grupojnë disa vlera pa krijuar klasë — p.sh. (string Emri, int Nota). Janë shumë të dobishme kur një metodë duhet të kthejë më shumë se një vlerë.

Unity

Unity-ja është një nga motorët më të njohur për lojëra 2D dhe 3D, dhe skriptet e saj shkruhen në C#. Shumë lojëra celulari dhe indie janë bërë me të. Për shumë të rinj, është arsyeja pse fillojnë me C#.

using directive & namespaces

Direktiva using

Në krye të skedarit, using System; të lejon të përdorësh klasat e një namespace-i pa e shkruar emrin e plotë. Me namespace Fjalori; i grupon klasat e tua, që të mos përplasen me klasa të tjera me të njëjtin emër.

using statement & IDisposable

Urdhri using

Disa objekte mbajnë burime — skedarë, lidhje me databazën — që duhet të mbyllen. Me using (ose using var), C#-i e thërret vetë Dispose() kur mbaron blloku, edhe nëse ndodh gabim.

Value types vs reference types

Tipet vlerë dhe tipet referencë

Në C#, tipet vlerë (int, double, bool, struct) kopjohen të plota kur i cakton; tipet referencë (class, string, varg, List) kopjojnë vetëm „adresën“ — të dy variablat tregojnë te i njëjti objekt.

var (C#)

var i thotë kompajlerit të C#-it ta gjejë vetë tipin nga vlera — var emrat = new List<string>();. Tipi mbetet i fiksuar; thjesht s'e shkruan dy herë.

virtual, override & abstract (C#)

virtual dhe override në C#

Në C#, një metodë mund të mbishkruhet vetëm nëse prindi e shënon virtual (ose abstract), dhe fëmija duhet të shkruajë qartë override. Kështu s'ndodh kurrë mbishkrim „pa dashje“.

WinForms & WPF

WinForms dhe WPF janë mënyrat klasike për të ndërtuar programe Windows me dritare dhe butona në C#. WinForms është më i thjeshtë (tërheq butonat me maus), WPF më modern dhe e përshkruan pamjen me XAML. Shpesh mësohen në shkollat profesionale.

xUnit & NUnit

xUnit, NUnit dhe MSTest janë libraritë për teste në .NET. Me xUnit, një test shënohet [Fact] dhe kontrollon me Assert.Equal(); komanda dotnet test i ekzekuton të gjitha.