CodeGym /Các khóa học /C# SELF /Khám phá dự án C#

Khám phá dự án C#

C# SELF
Mức độ, Bài học
Có sẵn

1. Cấu trúc tổng thể của dự án C#

Chương trình của bạn không chỉ là một file, mà là cả một bộ sưu tập file, thư mục và cấu hình. C# là ngôn ngữ kiểu tĩnh, với app lớn thì càng phải gọn gàng. Nếu bạn bỏ qua cấu trúc project, code của bạn sẽ thành mê cung điện tử, đến dòng "Hello, World!" của chính mình cũng không tìm nổi.

Ngoài ra, hiểu cấu trúc project là skill mà nhà tuyển dụng rất thích. Nó giống như biết chìa khóa và remote TV để đâu trong nhà vậy — sống dễ hơn nhiều!

Cho dễ hình dung, hãy tưởng tượng project C# của bạn là một cái hộp chia ngăn:

MyFirstConsoleApp/
├── MyFirstConsoleApp.csproj
├── Program.cs
├── Properties/
│    └── launchSettings.json
├── bin/
│    └── ... (nơi chứa chương trình đã biên dịch)
├── obj/
│    └── ... (nơi chứa file tạm khi biên dịch)

Chi tiết cấu trúc:

Tên Dùng để làm gì
MyFirstConsoleApp.csproj
File project: “hộ chiếu” của chương trình, chứa mọi cấu hình project.
Program.cs
File chính với entry point (Main). Thường bạn sẽ viết code đầu tiên ở đây.
Properties/
Thư mục chứa cấu hình project, ví dụ cách chạy từ IDE.
bin/
“Giỏ thành phẩm” — nơi chứa file thực thi đã build xong.
obj/
File tạm khi biên dịch (kiểu như bản nháp khi viết truyện, bạn hiếm khi phải xem).

2. File project (.csproj)

File có đuôi .csproj là trái tim và bộ não của project. Ở đây lưu mọi cấu hình tổng thể: version ngôn ngữ, dependency, file nào cần build, package nào đã add, v.v. Chuyển sang Solution Explorer tab Files.

Ví dụ file cho app console:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net9.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>

</Project>
  • <TargetFramework>net9.0</TargetFramework> — báo là project build cho .NET 9.
  • <OutputType>Exe</OutputType> — nghĩa là sẽ ra file thực thi (.exe cho Windows).
  • Trong block <PropertyGroup> lưu các tham số chính.
  • File này bạn có thể add thêm NuGet package, chỉnh config build, bật/tắt tính năng.

3. File chính của chương trình: Program.cs

Nếu ví project như sân khấu, thì Program.cs là sân khấu chính, còn các file khác là hậu trường. Ở đây có cái gọi là "entry point" — method Main.


// Program.cs
using System;

namespace MyFirstConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Xin chào, thế giới!");
        }
    }
}
Ví dụ tối giản Program.cs
  • namespace — không gian tên, giúp gom class lại và tránh trùng tên.
  • class Program — class chính, chứa method Main.
  • static void Main(string[] args) — entry point bắt buộc — chương trình chạy từ đây.
  • Console.WriteLine() — cách quen thuộc để "nói chuyện" với thế giới.

Cập nhật ứng dụng của chúng ta

Nhớ lại bài trước, ta đã làm mini-app hỏi tên user và chào user. Ví dụ:


// Program.cs
using System;

namespace MyFirstConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Vui lòng nhập tên của bạn: ");
            string name = Console.ReadLine();
            Console.WriteLine($"Chào mừng, {name}! Chúc bạn sống lâu và thịnh vượng.");
        }
    }
}

Chạy project: bấm nút xanh ▶️ Run.

Nếu mọi thứ ok, bên dưới sẽ hiện tab Run. Bạn sẽ thấy chương trình chạy và chờ bạn trả lời câu hỏi Vui lòng nhập tên của bạn:. Gõ tên bất kỳ (ví dụ "Cat") ngay trong console này rồi nhấn Enter.

Ngay sau khi nhấn Enter, chương trình sẽ xử lý input và in ra thông báo cuối cùng với tên bạn. Chương trình kết thúc và bạn thấy kết quả.

4. Viết code ở đâu: quy tắc cơ bản

Viết code ở đâu?

Lúc đầu, nên viết logic chính trong file Program.cs ở method Main. Khi app lớn dần, bạn sẽ tạo file và class mới, nhưng giờ cứ tập trung ở đây là đủ vui rồi.

Làm gì (và không nên làm gì) trong Main?

  • Có thể: khai báo biến, tính toán, gọi method, in/đọc dữ liệu.
  • Không được: viết code “ngoài” method hay class (ví dụ, dòng Console.WriteLine("Hello"); nằm ngoài Main — không được đâu nhé!).

Comment

Comment code cho mình và cho người khác. Comment một dòng dùng //, nhiều dòng thì /* ... */. Càng dễ hiểu sau này càng tốt, khỏi phải đoán “mình viết cái này để làm gì nhỉ?”.

// Đây là comment một dòng

/*
 Đây là —
 comment nhiều dòng.
*/

5. Chương trình chạy như thế nào?

Chương trình luôn bắt đầu từ method Main. Mọi thứ trước đó đều bị bỏ qua. Muốn làm gì khi chạy? Đặt vào Main nhé.

Ví dụ — sơ đồ khối đơn giản (code → chạy):

Bắt đầu chương trình
     |
     v
Method Main
     |
     v
Chạy từng lệnh trong Main (theo thứ tự)
     |
     v
Kết thúc chương trình

6. App phát triển ra sao: thêm file mới

Khi nào nên tạo file mới?

Khi code dài quá một màn hình, biến không nhớ nổi nữa, thì đã đến lúc chia nhỏ code ra.

Ví dụ: làm calculator thì nên tạo file Calculator.cs riêng cho class calculator.

MyFirstConsoleApp/
├── Program.cs
├── Calculator.cs  // File mới chứa logic calculator

Thêm file mới trong Rider như nào

  1. Trong Solution Explorer, click phải vào project → "Add" → "New File" (hoặc "New Class").
  2. Đặt tên file có ý nghĩa.
  3. Viết class hoặc function mới trong file đó.
// Calculator.cs
namespace MyFirstConsoleApp
{
    class Calculator
    {
        public static int Add(int a, int b)
        {
            return a + b;
        }
    }
}

Giờ dùng nó trong Program.cs:

// Program.cs
using System;

namespace MyFirstConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            int sum = Calculator.Add(2, 3);        //Dùng hàm Add từ class Calculator
            Console.WriteLine($"2 + 3 = {sum}");
        }
    }
}

7. "Build" và "Run" — bên trong có gì?

Khi bạn bấm Run (hoặc F5), IDE sẽ:

  • Kiểm tra cú pháp và build code thành file nhị phân (.exe hoặc .dll) vào thư mục bin/Debug/net9.0/ hoặc bin/Release/net9.0/.
  • Chạy file vừa build.
  • In kết quả ra terminal/console mà bạn thấy.

bin/ và obj/: hai thư mục này để làm gì?

  • bin/ — chứa thành phẩm (chương trình đã build).
  • obj/ — chứa file tạm, compiler cần để tính toán trung gian.

Thường thì bạn cứ kệ hai thư mục này, nội dung của chúng sẽ được build lại khi cần.

8. Lỗi thường gặp khi viết code và làm việc với project

Viết code không phải là gõ bừa. Khi gặp lỗi kiểu CS5001: Program does not contain a static 'Main' method suitable for an entry point, dân dev lại đổ xô đi google, còn IDE thì báo lỗi bằng ngôn ngữ càng khó hiểu hơn.

  • Một lỗi phổ biến — code nằm ngoài method hoặc class. Trong C# không được viết lệnh trực tiếp ngoài class/method! Mọi thứ phải nằm trong class và method!
  • Tên file và class khác nhau. Được thôi, nhưng nên đặt giống nhau, dễ hiểu cho bạn (và đồng nghiệp tương lai) hơn.
  • Rối namespace. Nếu tạo class ở namespace khác (namespace), nhớ import bằng using.
  • Quên entry point. Nếu xóa hoặc đổi tên method Main, chương trình sẽ không chạy được.
2
Nhiệm vụ
C# SELF, mức độ, bài học
Đã khóa
Số lượng chữ số
Số lượng chữ số
2
Nhiệm vụ
C# SELF, mức độ, bài học
Đã khóa
Giá trị nhỏ nhất trong ba số
Giá trị nhỏ nhất trong ba số
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION