2-bo‘lim
Muhitni sozlash va birinchi loyiha
.NET SDK ni o'rnatish, muharrir tanlash, dotnet buyruqlari, loyiha tuzilmasi, csproj fayli va yashirin using'lar.
Ushbu bo‘lim mundarijasi
C# yozish uchun ikki narsa kerak: .NET SDK va matn muharriri. Ikkalasi ham bepul va barcha tizimlarda ishlaydi.
.NET SDK ni o'rnatish #
SDK - bu kompilyator, standart kutubxona va dotnet buyrug'i birgalikda.
| Tizim | Qanday |
|---|---|
| Windows | dotnet.microsoft.com/download dan o'rnatuvchini yuklang |
| macOS | O'sha saytdan yoki brew install dotnet-sdk |
| Linux (Ubuntu, Debian) | sudo apt install dotnet-sdk-10.0 |
| Har qanday tizim | Rasmiy dotnet-install skripti |
Yuklash sahifasida ikki variant bo'ladi:
- Runtime - tayyor dasturni ishga tushirish uchun. Kod yozib bo'lmaydi.
- SDK - dastur yozish uchun. Ichida runtime ham bor.
Sizga SDK kerak. Ko'pchilik tasodifan Runtime'ni o'rnatib, keyin
dotnet new buyrug'i ishlamasligidan hayron bo'ladi.
O'rnatgach tekshiring:
dotnet --version
Versiya raqami chiqsa (masalan 10.0.401), hammasi joyida. Buyruq
topilmasa, terminalni yopib qayta oching.
Muharrir tanlash #
| Muharrir | Tizim | Izoh |
|---|---|---|
| VS Code + C# Dev Kit | Hammasi | Bepul, yengil - boshlash uchun eng yaxshi |
| Visual Studio Community | Windows | Bepul, juda kuchli, og'ir |
| Rider | Hammasi | Pullik, talabalar uchun bepul |
| Har qanday matn muharriri | Hammasi | dotnet buyruqlari baribir ishlaydi |
VS Code o'rnatgandan keyin kengaytmalar bo'limidan C# Dev Kit ni o'rnating (nashriyot - Microsoft).
U avtomatik to'ldirish, xatolarni jonli ko'rsatish, nosozliklarni
qidirish va dotnet buyruqlarini menyudan ishlatish imkonini beradi.
Usiz ham yozish mumkin, lekin u bilan ancha qulay.
Birinchi loyiha #
Terminalni oching va uchta buyruqni bajaring:
dotnet new console -o Salom
cd Salom
dotnet run
Ekranda Hello, World! chiqadi.
Nima bo'ldi:
dotnet new console-Salompapkasida yangi konsol loyihasi yaratdi;cd Salom- o'sha papkaga kirdi;dotnet run- kodni kompilyatsiya qilib, ishga tushirdi.
Loyiha tuzilmasi #
Yaratilgan papkada shular bor:
Salom/
Program.cs <- kodingiz shu yerda
Salom.csproj <- loyiha sozlamalari
obj/ <- vaqtinchalik fayllar
bin/ <- tayyor dastur (qurilgandan keyin)
obj va bin papkalari avtomatik yaratiladi. Ularni Git'ga
qo'shmang va qo'lda tahrirlamang - o'chirib yuborsangiz, keyingi
qurishda qaytadan paydo bo'ladi.
Program.cs #
Yangi loyihada u bitta qatordan iborat:
Console.WriteLine("Hello, World!");
Hello, World!
Salom.csproj #
Bu loyihaning pasporti. XML ko'rinishida yoziladi:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
| Sozlama | Ma'nosi |
|---|---|
OutputType | Exe - ishga tushadigan dastur (Library - kutubxona) |
TargetFramework | Qaysi .NET versiyasi uchun: net10.0 |
ImplicitUsings | Ko'p ishlatiladigan using larni avtomatik qo'shadi |
Nullable | null xavfsizligi tekshiruvini yoqadi (12-bo'lim) |
Yashirin using'lar #
ImplicitUsings yoqilgani uchun Program.cs boshida using System;
yozish shart emas. Kompilyator eng kerakli fazolarni o'zi qo'shadi.
Shu sababli quyidagi kod hech qanday using siz ishlaydi:
List<string> shaharlar = ["Namangan", "Andijon", "Samarqand"];
int uzunlar = shaharlar.Count(s => s.Length > 7);
Console.WriteLine($"Jami: {shaharlar.Count}, uzun nomlilar: {uzunlar}");
Console.WriteLine(string.Join(" | ", shaharlar.Order()));
Jami: 3, uzun nomlilar: 2
Andijon | Namangan | Samarqand
Bu yerda List<T> (System.Collections.Generic), Count va Order
(System.Linq) hamda Console (System) ishlatildi - hech biri uchun
using yozilmadi.
Bu qisqa misolda zamonaviy C# ning to'rt belgisi bor:
[...]to'plam ifodasi (C# 12) -new List<string> { ... }o'rniga qisqa yozuv;- lambda
s => s.Length > 7- 16-bo'limda batafsil; - LINQ metodlari
CountvaOrder- 15-bo'limda; - satr interpolatsiyasi
$"..."- keyingi bo'limda.
Hozircha ularni tushunish shart emas. Muhimi shu: bu qatorlar hech
qanday using talab qilmadi.
Yashirin using lar ro'yxatiga kirmagan fazolar uchun esa yozish
kerak. Masalan System.Text:
using System.Text;
StringBuilder matn = new();
matn.Append("Salom");
matn.Append(", ");
matn.Append("dunyo!");
Console.WriteLine(matn.ToString());
Console.WriteLine($"Uzunligi: {matn.Length}");
Salom, dunyo!
Uzunligi: 13
Asosiy dotnet buyruqlari #
| Buyruq | Nima qiladi |
|---|---|
dotnet new console -o Nom | Yangi konsol loyihasi |
dotnet new list | Mavjud shablonlar ro'yxati |
dotnet run | Kompilyatsiya qilib, ishga tushiradi |
dotnet build | Faqat kompilyatsiya qiladi |
dotnet clean | bin va obj ni tozalaydi |
dotnet publish -c Release | Tarqatishga tayyor variant |
dotnet add package Nom | NuGet paketini qo'shadi |
dotnet --info | O'rnatilgan SDK va runtime'lar |
Sukut bo'yicha dotnet run Debug rejimida quradi: kod
optimallashtirilmaydi, lekin nosozliklarni qidirish qulay.
Tayyor dastur uchun Release kerak:
dotnet run -c Release
Release rejimida kompilyator optimallashtirish qiladi va dastur sezilarli tezroq ishlaydi. Tezlikni o'lchayotganda har doim Release'da o'lchang - aks holda natija ma'nosiz bo'ladi.
Dastur argumentlari #
Yuqori darajali ko'rsatmalarda args o'zgaruvchisi tayyor turadi:
if (args.Length == 0)
{
Console.WriteLine("Argument berilmadi");
}
else
{
Console.WriteLine($"Argumentlar soni: {args.Length}");
foreach (string arg in args)
{
Console.WriteLine($" - {arg}");
}
}
Argument berilmadi
Yuqoridagi natija dotnet run ni argumentsiz ishga tushirganda
chiqadi. Argument bersangiz:
dotnet run -- Husanboy Namangan
Endi chiqish shunday bo'ladi:
Argumentlar soni: 2
- Husanboy
- Namangan
Ikkita chiziqcha (--) muhim: usiz dotnet so'zlarni o'ziga
tegishli deb o'ylaydi.
args ni o'zingiz e'lon qilmangSinab ko'rish uchun string[] args = ["Husanboy"]; deb yozgingiz
kelishi mumkin. Bu kompilyatsiya xatosi beradi:
error CS0136: A local or parameter named 'args' cannot be declared
in this scope because that name is used in an enclosing local scope
Sababi: yuqori darajali ko'rsatmalarda kompilyator Main(string[] args)
ni o'zi yozadi, ya'ni args allaqachon mavjud. Uni qaytadan e'lon
qilib bo'lmaydi - shunchaki ishlatavering.
Sinov uchun boshqa nom tanlang, masalan sinovArgs.
Ko'p uchraydigan xatolar #
| Xato | Sababi | Yechim |
|---|---|---|
dotnet: command not found | SDK o'rnatilmagan yoki PATH da yo'q | Terminalni qayta oching |
No project file found | Loyiha papkasida emassiz | cd bilan kiring |
error CS0103: The name ... does not exist | Nom xato yozilgan yoki using yetishmayapti | Imloni va using ni tekshiring |
error CS5001: Program does not contain a static 'Main' | OutputType Exe, lekin kirish nuqtasi yo'q | Program.cs bo'sh qolmasin |
Ikkita Main haqida xato | Papkada ikkita Program.cs bor | Har bir loyiha alohida papkada bo'lsin |
Yangi boshlovchilar ko'pincha bitta papkada bir nechta misol fayl
yaratadi va kutilmagan xatoga duch keladi: CS0017 - "birdan ortiq
kirish nuqtasi".
Sababi: dotnet papkadagi barcha .cs fayllarni bitta loyiha deb
qaraydi. Ikkita faylda Main bo'lsa yoki ikkitasida yuqori darajali
ko'rsatmalar bo'lsa - qaysi biri boshlanishini bilmaydi.
Har bir mashq uchun alohida papka oching. Bu darslikdagi misollarni
sinash uchun bitta loyiha yetarli - Program.cs ichidagi kodni
almashtirib turing.
- .NET SDK ni o'rnating va
dotnet --versionbilan tekshiring. - SDK va Runtime farqini o'z so'zingiz bilan yozing.
- VS Code va C# Dev Kit kengaytmasini o'rnating.
dotnet new console -o Mashqbilan loyiha yarating.Program.csva.csprojfayllarini ochib o'qing.dotnet runbilan ishga tushiring.Program.csichidagi matnni o'zgartirib, qaytadan ishga tushiring.dotnet builddan keyinbinpapkasida nima paydo bo'lganini ko'ring.dotnet run -- salom dunyobilan argument uzating va chiqishini kuzating.dotnet new listbilan qanday shablonlar borligini ko'ring.
Xulosa #
- Yozish uchun SDK kerak, Runtime emas.
- Loyiha
dotnet new console -o Nombilan yaratiladi,dotnet runbilan ishga tushadi. Program.cs- kodingiz,.csproj- loyiha sozlamalari,binvaobj- avtomatik papkalar.ImplicitUsingsko'p ishlatiladiganusinglarni avtomatik qo'shadi; qolganini qo'lda yozasiz.- Tezlikni o'lchash yoki tarqatish uchun
-c Releaseishlating. - Argumentlar
dotnet run -- arg1 arg2ko'rinishida uzatiladi. - Bitta papkada bitta loyiha - aks holda "birdan ortiq kirish nuqtasi" xatosi chiqadi.
Keyingi bo'limda turlar va o'zgaruvchilarni o'rganamiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.