Struct trong lập trình C# căn bản

Khóa học lập trình C# căn bản

4.8 (5 đánh giá)
Tạo bởi Kteam Cập nhật lần cuối 22:43 22-03-2019 28.606 lượt xem 15 bình luận
Học nhanh

Danh sách bài học

Struct trong lập trình C# căn bản

Dẫn nhập

Ở các bài học trước, chúng ta đã cùng nhau tìm hiểu về STRING TRONG C#. Hôm nay chúng ta sẽ cùng tìm hiểu về Struct trong C#.


Nội dung

Để đọc hiểu bài này tốt nhất các bạn nên có kiến thức cơ bản về các phần:

Trong bài học này, chúng ta sẽ cùng tìm hiểu các vấn đề:

  • Struct là gì? Đặc điểm của struct.
  • Khai báo và sử dụng struct.

Struct là gì? Đặc điểm của Struct

Struct là một kiểu dữ liệu có cấu trúc, được kết hợp từ các kiểu dữ liệu nguyên thuỷ do người lập trình định nghĩa để thuận tiện trong việc quản lý dữ liệu và lập trình.

Xét bài toán sau:

Ta cần lưu trữ thông tin của 10 sinh viên với mỗi sinh viên gồm có các thông tin như

  •  Mã số.
  •  Họ tên.
  •  Nơi sinh.
  •  CMND.

Khi đó, để lưu thông tin của 1 sinh viên ta cần 4 biến chứa 4 thông tin trên. Nếu muốn lưu thông tin 10 sinh viên thì cần 40 biến. Chắc không quá nhiều, nhưng nếu muốn lưu thông tin của 1000, 10000 sinh viên thì sao?

  • Số lượng biến lúc này rất nhiều khiến cho code dài dòng khó thao tác, khó kiểm soát.

Từ đó người ta mới đưa ra khái niệm kiểu dữ liệu có cấu trúc để giải quyết vấn đề trên.

Ý tưởng là đóng gói các thông tin đó vào 1 đối tượng duy nhất. Như vậy thay vì phải khai báo 40 biến thì ta chỉ cần khai báo 1 mảng 10 phần tử mà mỗi phần tử có kiểu dữ liệu ta đã định nghĩa.


Đặc điểm của struct:

  • Là một kiểu dữ liệu tham trị (kiểu dữ liệu tham trị đã được trình bày trong bài KIỂU DỮ LIỆU )
  • Dùng để đóng gói các trường dữ liệu khác nhau nhưng có liên quan đến nhau.
  • Bên trong struct ngoài các biến có kiểu dữ liệu cơ bản còn có các phương thức, các struct khác.
  • Muốn sử dụng phải khởi tạo cấp phát vùng nhớ cho đối tượng thông qua toán tử new.
  • Struct không được phép kế thừa (khái niệm về kế thừa sẽ trình bày trong bài KẾ THỪA TRONG C# ).

Khai báo và sử dụng struct

Khai báo

Cú pháp:

struct <tên struct>

{

            public <danh sách các biến>;

}

Trong đó:

  • <tên struct> là tên kiểu dữ liệu do mình tự đặt và tuân thủ theo quy tắc đặt tên (đã trình bày trong bài BIẾN TRONG C#).
  • <danh sách các biến> là danh sách các biến thành phần được khai báo như khai báo biến bình thường (đã trình bày trong bài BIẾN TRONG C#).
  • Từ khoá public là từ khoá chỉ định phạm vi truy cập (sẽ trình bày trong bài TÍNH ĐÓNG GÓI). Trong ngữ cảnh hiện tại thì có thể hiểu từ khoá này giúp cho người khác có thể truy xuất được để sử dụng.

Ví dụ:

struct SinhVien
{
public int MaSo;
public string HoTen;
public double DiemToan;
public double DiemLy;
public double DiemVan;
}
  • Với khai báo này ta đã có 1 kiểu dữ liệu mới tên là SinhVien. Và có thể khai báo biến, sử dụng nó như sử dụng các kiểu dữ liệu khác.
  • Nếu như kiểu int có thể chứa số nguyên, kiểu double có thể chứa số thực thì kiểu SinhVien vừa khai báo có thể chứa 5 trường thông tin con là MaSo, HoTen, DiemToan, DiemLy, DiemVan

 Lưu ý: bên trong vẫn còn 2 khai báo chưa được nhắc đến đó là:

  • Constructor (hàm khởi tạo).
  • Các phương thức mà mình muốn cung cấp để hỗ trợ người dùng khi thao tác với dữ liệu bên trong struct.

Hai phần này sẽ được trình bày trong bài CLASS TRONG C#. Còn trong bài học này ta chỉ tìm hiểu cú pháp cơ bản của struct thôi.


Sử dụng

Ta có thể truy xuất đến từng thành phần dữ liệu của struct thông qua toán tử “.” Kèm theo tên thành phần muốn truy xuất.

Xét bài toán sau: Viết chương trình lưu trữ thông tin của sinh viên bao gồm: mã số, họ tên, điểm toán, điểm lý, điểm văn. Thực hiện nhập thông tin cho 1 sinh viên và tính điểm trung bình theo công thức (toán + lý + văn)/3.

Chương trình tham khảo:

struct SinhVien
        {
            public int MaSo;
            public string HoTen;
            public double DiemToan;
            public double DiemLy;
            public double DiemVan;
        }

        static void NhapThongTinSinhVien(out SinhVien SV)
        {
            Console.Write(" Ma so: ");
            SV.MaSo = int.Parse(Console.ReadLine());
            Console.Write(" Ho ten: ");
            SV.HoTen = Console.ReadLine();
            Console.Write(" Diem toan: ");
            SV.DiemToan = Double.Parse(Console.ReadLine());
            Console.Write(" Diem ly: ");
            SV.DiemLy = Double.Parse(Console.ReadLine());
            Console.Write(" Diem van: ");
            SV.DiemVan = Double.Parse(Console.ReadLine());
        }

        static void XuatThongTinSinhVien(SinhVien SV)
        {
            Console.WriteLine(" Ma so: " + SV.MaSo);
            Console.WriteLine(" Ho ten: " + SV.HoTen);
            Console.WriteLine(" Diem toan: " + SV.DiemToan);
            Console.WriteLine(" Diem ly: " + SV.DiemLy);
            Console.WriteLine(" Diem van: " + SV.DiemVan);
        }

        static double DiemTBSinhVien(SinhVien SV)
        {
            return (SV.DiemToan + SV.DiemLy + SV.DiemVan) / 3;
        }

        static void Main(string[] args)
        {
            /*
             * Khai báo 1 kiểu dữ liệu SinhVien với các trường thông tin như đề bài.
             * Khai báo và khởi tạo 1 đối tượng SV1 kiểu SinhVien.
             */
            SinhVien SV1 = new SinhVien();
            Console.WriteLine(" Nhap thong tin sinh vien: ");
            /*
             * Đây là hàm hỗ trợ nhập thông tin sinh viên.
             * Sử dụng từ khoá out để có thể cập nhật giá trị nhập được ra biến SV1 bên ngoài 
             * khi kết thúc gọi hàm (có thể xem lại bài Hàm trong C#).
             */
            NhapThongTinSinhVien(out SV1);
            Console.WriteLine("*********");
            Console.WriteLine(" Thong tin sinh vien vua nhap la: ");
            XuatThongTinSinhVien(SV1);
            Console.WriteLine(" Diem TB cua sinh vien la: " + DiemTBSinhVien(SV1));

            Console.ReadLine();
        }

Kết quả khi chạy chương trình trên là:

kteam

Trong chương trình trên ta có thể thấy:

  • Kiểu dữ liệu SinhVien có thể dùng làm kiểu dữ liệu cho biến, parametter cho phương thức. Ngoài ra còn có thể làm kiểu trả về cho phương thức (các bạn có thể khám phá thử, có thể tham khảo bài HÀM TRONG C#).
  • Các thành phần dữ liệu bên trong được truy xuất thông qua dấu “.”
  • struct là kiểu tham trị nên khi truyền vào các phương thức thì giá trị của nó sau khi kết thúc phương thức sẽ không thay đổi. Do đó cần sử dụng từ khoá out để có thể cập nhật giá trị thay đổi khi kết thúc phương thức.

Kết luận

Nội dung bài này giúp các bạn nắm được:

  • Struct là gì? Đặc điểm của struct.
  • Khai báo và sử dụng struct.

Bài sau chúng ta sẽ tìm hiểu về ENUM TRONG C#.

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.

 


Tải xuống

Tài liệu

Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Struct trong lập trình C# căn bản dưới dạng file PDF trong link bên dưới.

Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com

Đừng quên likeshare để ủng hộ Kteam và tác giả nhé!


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần BÌNH LUẬN bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.

Nội dung bài viết

Tác giả

Khóa học

Khóa học lập trình C# căn bản

Bạn mới bắt đầu học lập trình? Bạn đang muốn học thêm ngôn ngữ lập trình mới? C# là lựa chọn hoàn hảo để đáp ứng các nhu cầu trên.

Ngôn ngữ C# là một ngôn ngữ mới, cấu trúc rõ ràng, dễ hiểu và dễ học. C# thừa hưởng những ưu việt từ ngôn ngữ Java, C, C++ cũng như khắc phục được những hạn chế của các ngôn ngữ này. C# là ngôn ngữ lập trình hướng đối tượng được phát triển bởi Microsoft, được xây dựng dựa trên C++ và Java.

Khoá học lần này sẽ mang đến toàn bộ những kiến thức cơ bản về C#. Chào mừng các bạn đã đến với khoá học LẬP TRÌNH C# CƠ BẢN của Kteam.

Đánh giá

Trần Duy đã đánh giá 01:01 06-05-2019

Minh Sự đã đánh giá 21:45 21-04-2019

Meow

Uyen98 đã đánh giá 15:12 22-03-2019

KhacDuyLam đã đánh giá 19:38 01-03-2019

hantmmo đã đánh giá 19:38 01-03-2019

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
ndh1379 đã bình luận 01:08 25-04-2019

Sự khác nhau giữa Double và double là gì?
SV.DiemToan = Double.Parse(Console.ReadLine());

SV.DiemToan = double.Parse(Console.ReadLine());

có sự khác nhau gì không??

Xin mọi người giải đáp giúp! Cảm ơn!

lê vũ đã bình luận 09:51 05-10-2018

mình chưa hiểu chỗ "out" lắm. Tại sao trong: static void NhapThongTin(out SinhVien SV) có out mà trong: static void XuatThongTin(SinhVien SV) lại k dùng out. Mình chưa hiểu kỹ xin đừng cười, mong ad và mng giải thích giúp, thanks!

palladium88 đã bình luận 17:18 25-09-2018
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Xulichuoi
{
    class Program
    {
       struct SinhVien
        {
            public int Maso;
            public string HoTen;
            public double DiemToan;
            public double DiemVan;
            public double DiemAnh;
            public double DiemKhoaHoc;
        }
        static void Main(string[] args)
        {
            SinhVien SV1 = new SinhVien();
            Console.Write(" Nhap thong tin SV: \n");
            NhapThongTin(out SV1);
            Console.Write("******************\n");
            XuatThongTin(SV1);
            Console.Write(" Diem Trung Binh: " + DiemTrungBinh(SV1));
            Console.ReadKey();
        }
        static void NhapThongTin(out SinhVien SV)
        {
            Console.Write(" Ma so: ");
            SV.Maso = int.Parse(Console.ReadLine());
            Console.Write(" Ho va ten: ");
            SV.HoTen = Console.ReadLine();
            Console.Write(" Diem Toan: ");
            SV.DiemToan = double.Parse(Console.ReadLine());
            Console.Write(" Diem Anh: ");
            SV.DiemAnh = double.Parse(Console.ReadLine());
            Console.Write(" Diem Van: ");
            SV.DiemVan = double.Parse(Console.ReadLine());
            Console.Write(" Diem Khoa Hoc: ");
            SV.DiemKhoaHoc = double.Parse(Console.ReadLine());
        }
        static void XuatThongTin(SinhVien SV)
        {
            Console.WriteLine(" Ma so: " + SV.Maso);
            Console.WriteLine(" Ho ten: " + SV.HoTen);
            Console.WriteLine(" Diem Toan: " + SV.DiemToan);
            Console.WriteLine(" Diem Van: " + SV.DiemVan);
            Console.WriteLine(" Diem Anh: " + SV.DiemAnh);
            Console.WriteLine(" Diem Khoa hoc: " + SV.DiemKhoaHoc);
        }
        static double DiemTrungBinh(SinhVien SV)
        {
            return (SV.DiemAnh + SV.DiemKhoaHoc + SV.DiemToan + SV.DiemVan) / 4;
        }
    }
}

 

dungnnn8979 đã bình luận 20:49 18-06-2018

sau một số bài học mong ad ra thêm bài tập để mọi người làm quen dễ hơn và nhớ kiến thức hơn

caovy2001 đã bình luận 23:25 25-06-2017

Sao mình chưa thấy bài giảng về Class vậy Ad?

Không có video.