Hiển thị các bài đăng có nhãn Lập trình C#. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Lập trình C#. Hiển thị tất cả bài đăng
Cách tạo mảng động trong C#

Cách tạo mảng động trong C#

Mảng động là khai báo một mảng phần tử có kích thước động. Mảng động là rất quan trọng, tối ưu trong việc lập trình, nó cấp phát bộ nhớ lưu trữ động. Vậy các khai báo và sử dụng mảng động trong C# như thế nào? Sau đây sẽ giới thiệu về mảng động trong C#.

Từ khóa khai báo List<Kiểu_dữ_liệu> mang_dong= new ListKiểu_dữ_liệu >();

-          Kiểu_dữ_liệu: Là kiểu dữ liệu có thể là String, double, int,...hoặc là kiểu dữ liệu do người dùng định nghĩa.
Các thuộc tính trong mảng động cho ta thao tác:
-          Thêm phần tử vào mảng dùng thuộc tính Add, phần từ thêm sẽ vào vị trí cuối mảng
-          Đếm số phần tử có trong mảng dùng thuộc tính Count.
-          Xóa phần tử trong mảng dùng thuộc tính RemoveRange, RemoveAll, RemoveAt
-          Nhiều các thuộc tính khác.
Ví dụ 1:
private Void vidu1
{
List<string> mang_xau = new List<string>();
for (int i = 0; i < 5; i++)
   {
mang_xau.Add(i.ToString());//Thêm phần tử vào mảng
}
MessageBox.Show(mang_xau.Count.ToString());//Hiển thị số phần tử trong mảng
MessageBox.Show(mang_xau[2]);//Hiển thị giá trị phần tử thứ 3
mang_xau.RemoveRange(0, mang_xau.Count); //Xóa phần tử từ vị trí đầu đến hết
}
Kết quả hiển thị thông báo lần lượt là: 5, 3

Ví dụ 2:
//Định nghĩa kiểu dữ liệu
public struct diem_daucuoi
{
public string danhtu_chung, danhtu_rieng;
public int giatri;
}
private Void vidu2
{
List<diem_daucuoi> mang_dinhnghia = new List<diem_daucuoi>();
for (int i = 0; i < 5; i++)
      {
            diem_daucuoi Diem = new diem_daucuoi();
            Diem.danhtu_chung = "chung" + i.ToString();
            Diem.danhtu_rieng = "rieng" + i.ToString();
Diem. giatri = i+1;
            //Add điểm
            mang_dinhnghia.Add(Diem);
      }
            //Sắp xếp mang_dinhnghia giảm dần theo giatri
for (int i = 0; i < mang_dinhnghia.Count-1; i++)
      {
for (int j = i+1; j < mang_dinhnghia.Count; j++)
            {
                                    if(mang_dinhnghia[j].giatri> mang_dinhnghia[i].giatri)
                                    {
                                                diem_daucuoi tg = mang_dinhnghia[j];
                                                mang_dinhnghia[j]= mang_dinhnghia[i];
                                                mang_dinhnghia[i]= tg;
                                    }
                        }
            }
            String xau="";
for (int i = 0; i < mang_dinhnghia.Count; i++)
            {
                        xau+= mang_dinhnghia[i].giatri.ToString()+"\n";
            }
MessageBox.Show(xau);//Hiển thị xau
mang_xau.RemoveRange(0, mang_xau.Count); //Xóa phần tử từ vị trí đầu đến hết
}
Kết quả hiển thị thông báo là:
      5
4
3
2
1
Code mã hóa MD5 trong C#

Code mã hóa MD5 trong C#

Khi bạn viết một ứng dụng mà đòi hỏi tính bảo mật, không muốn người khác có thể đọc thông tin bạn lưu trữ. Như có liên quan đến cơ sở dữ liệu, hoặc bất cứ thông tin nào đó mà không muốn người dùng đọc dịch được thì ta sẽ sử dụng bộ mã hóa. Trong C# hỗ trợ việc mã hóa MD5 rất dễ dàng. MD5 là một dạng mã hóa rất cao tại thời điểm hiện tại, nó đã được kiểm trứng khả năng dịch ngược lại là rất khó.

Trong C# có thư viện hỗ trợ mã hóa MD5 đó là thư viện System.Security.Cryptography. Khi bạn viết ứng dụng khai báo thư viện này và sử dụng hàm mã hóa như sau:
public string GetMD5(string chuoi)
        {
            string str_md5 = "";
            byte[] mang = System.Text.Encoding.UTF8.GetBytes(chuoi);

            MD5CryptoServiceProvider my_md5 = new MD5CryptoServiceProvider();
            mang = my_md5.ComputeHash(mang);

            foreach (byte b in mang)
            {
                str_md5 += b.ToString("x2");//Nếu là "X2" thì kết quả sẽ tự chuyển sang ký tự in Hoa
            }

            return str_md5;
        }

Kết quả trả về là đã mã hóa. Khi bạn mã hóa bất kỳ thông tin nào hãy dùng hàm này.
Tương tác với System Registry trong C#

Tương tác với System Registry trong C#

Nếu là dân lập trình COM, chắc hẳn bạn không thể tránh khỏi sự khốn khổ khi lập trình với Registry của Windows . Còn nếu bạn sống chung với VS.NET rất ư là thưa thớt, .NET Framework đã giảm sự quan trọng của Registry đối với ứng dụng, vì assembly đã trở...
Nếu là dân lập trình COM, chắc hẳn bạn không thể tránh khỏi sự khốn khổ khi lập trình với Registry của Windows. Còn nếu bạn sống chung với VS.NET rất ư là thưa thớt, .NET Framework đã giảm sự quan trọng của Registry đối với ứng dụng, vì assembly đã trở thành “tự cung tự cấp” do đó assembly không cần thông tin đặc biệt được trữ trên RegistryRegistry giờ đây chỉ nơi tiện lợi để bạn lưu trữ thông tin về sở thích của người sử dụng.
Namespace Microsoft.Win32

Namespace Microsoft.Win32 định nghĩa một vài lớp cho phép đọc/viết registry một cách dễ dàng. Sau đây là các lớp trong namespace này:
-Registry: Một trừu tượng hóa cấp cao về bản thân Registry, với tất cả các lớp được gắn liền
-RegistryKey : Đây là lớp cốt lõi cho phép bạn thêm vào, gỡ bỏ và nhật tu thông tin được trữ trong Registry
-RegistryHive: Đây chỉ là mỗi khuôn tổ ong (hive) trên Registry
Trước khi đi vào việc tương tác với Registry qua C#, bạn cũng nên biết qua chút ít về Registry trong Windows:
Để mở Registry: nhấn menu Start trên thanh taskbar, sau đó chọn Run, ở hộp thoại Run vừa hiện ra, gõ vào regedit.
HKEY_CLASSIES_ROOT (HKCR): chứa những chi tiết về các loại tập tin (.txt,.doc,…) và những ứng dụng nào đó có khả năng mở các tập tin loại nào. Ngoài ra, nó còn chứa những thông tin đăng ký đối với tất cả các cấu kiện COM
HKEY_CURRENT_USER (HKCU): chứa những chi tiết liên quan đến những sở thích của người sử dụng hiện được đăng nhập trên máy tính.
HKEY_LOCAL_MACHINE (HKLM): là một hive đồ sộ chứa những chi tiết của tất cả các phần mềm và phần cứng được cài đặt trên máy. Nó cũng bao gồm HKCR hive: HKCR hiện thật sự không phải là 1 hive độc lập tự thân, nhưng đơn giản là một ánh xạ tiện lợi trên Registry key.
HKEY_USERS (HKUSR): chứa những chi tiết liên quan đến sở thích của tất cả các người sử dụng. Như bạn có thể chờ đợi, nó cũng chứa hive HKCU, đơn giản là 1 ánh xạ lên 1 trong những key trên HKEY_USERS
HKEY_CURRENT_CONFIG
: chứa những chi tiết liên quan đến phần cứng trên máy tính.
Các lớp.NET Registry

Việc truy cập vào Registry trên .NET sẽ thông qua 2 lớp Registry và RegistryKey thuộc namespace Microsoft.Win32. Một thể hiện của lớp Registry Key tượng trưng cho một registry key. Lớp RegistryKey cung cấp những thành viên cốt lõi sau đây cho phép bạn làm việc với một registry key:
-Name: thuộc tính này tìm lại tên của key (read-only)
-SubKeyCount: thuộc tính này tìm lại bộ đếm số lượng subkey
-ValueCount: tìm lại bộ đếm các giá trị trên một key
-Close(): hàm này cho đóng lại key, và ghi lên đĩa cứng nếu nội dung bị thay đổi
-CreateSubKey(): hàm này tạo 1 subkey mới hoặc mở 1 subkey hiện hữu. Chuỗi subkey không phân biệt chữ hoa, chữ thường.
-DeleteSubKey(): hàm này cho gỡ bỏ 1 subkey được chỉ định. Nếu muốn gỡ bỏ những subkey con thì sử dụng đến DeleteSubKeyTree(). Chuỗi subkey không phân biệt chữ hoa, chữ thường
-GetSubKeyNames(): hàm này cho tìm lại mảng chứa tất cả các tên của subkey
-GetValue(): hàm này tìm lại trị được khai báo.
-GetValueNames(): hàm này cho tìm lại 1 bản dãy chuỗi chữ chứa tất cả các tên trị (value name)
-OpenRemoteBaseKey(): hàm này cho mở 1 RegistryKey mới tượng trưng cho key được yêu cầu trên một máy nằm ngoài.
-OpenSubKey(): hàm này cho tìm lại SubKey()
-SetValue(): hàm này cho đặt để 1 trị được chỉ định. Chuỗi subkey không phân biệt hoa thường.
Lớp RegistryKey

Lớp RegistryKey là lớp mà chúng ta sẽ dùng để làm việc với registry. Bài viết này sẽ đi sâu vào lớp này. Đầu tiên, muốn có 1 thể hiện của 1 RegistryKey, tượng trưng cho key HKEY_LOCAL_MACHINE , bạn viết:

[PHP]RegistryKey Hklm = Registry.LocalMachine;[/PHP]


Như bạn đã thấy, đối tượng Hklm đơn giản là đang trỏ tới khóa HKEY_LOCAL_MACHINE (HKLM) trong Registry. Cũng không có gì khó hiểu, chúng ta qua bước nữa nhé. Bây giờ, nếu bạn muốn đọc 1 vài dữ liệu trên HKEY_LOCAL_MACHINE\Software\Microsoft, bạn phải lấy qui chiếu về key như sau:

[PHP]RegistryKey Hklm = Registry.LocalMachine;
RegistryKey HkSoftware = Hklm.OpenSubKey(“Software”);
RegistryKey HkMicrosoft = HkSoftware.OpenSubkey(“Microsoft”); [/PHP]


Hàm hành sự OpenSubKey() là 1 trong những hàm bạn sẽ triệu gọi nếu bạn chờ đợi key hiện hữu. Nếu nó không có, thì nó sẽ trả về một null reference. Còn nếu bạn muốn tạo 1 key mới, bạn sẽ dùng hàm CreateSubKey() (hàm này tự động cho quyền Read-Write):

[PHP]RegistryKey Hklm = Registry.LocalMachine;
RegistryKey HkSoftware = Hklm.OpenSubKey(“Software”);
RegistryKey HkMine = HkSoftware.CreateSubKey(“Phan mem cua toi”);[/PHP]

Như thế là chúng ta đã có có khóa mang tên “Phan mem cua toi” trong HKEY_LOCAL_MACHINE\Software rồi đấy.
Điều thông thường xảy ra là ứng dụng của bạn cần bảo đảm là 1 vài dữ liệu hiện diện trong Registry – nói cách khác là tạo ra những key mang ý nghĩa nếu chúng chưa hiện diện, nhưng không làm gì cả nếu chúng hiện diện. CreateSubkey() đáp ứng đúng nhu cầu này.
Một khi bạn đã có Registry key, bạn muốn đọc hoặc thay đổi, bạn có thể sử dụng hàm SetValue() hoặc GetValue() để đặt thuộc đi lấy dữ liệu trên Key. Thí dụ:

[PHP]RegistryKey HkMine = HkSoftware.CreateSubkey(“Phan mem cua toi”);
HkMine.SetValue(“Ma so dang ky”, “Hello World”);
HkMine.SetValue(“So hieu”, 33);

Đoạn mã trên sẽ đặt key về 2 giá trị: “Ma so dang ky” sẽ mang kiểu dữ liệu REG_SZ, trong khi “So hieu” sẽ mang kiểu dữ liệu REG_DWORD (ở đây giá trị của nó = 33)
RegistryKey.GetValue() hoạt động cũng như vậy, nó được định nghĩa trả về 1 quy chiếu đối tượng, nghĩa là trả về 1 qui chiếu string nếu nó thấy có kiểu dữ liệuREG_SZ và một int nếu phát hiện kiểu dữ liệu REG_DWORD:

[PHP] string StringValue = (string) HkMine.GetValue(“Ma so dang ky”);
int sohieu = (int) HkMine.GetValue(“So hieu”);
[/PHP]
Khi đã thao tác xong với registry, bạn nhớ là phải cho đóng lại
HkMine.Close();

Ví dụ

Bây giờ, chúng ta thực hiện một ứng dụng nho nhỏ, chúng ta thử xây dựng 1 ứng dụng Windows Forms, trong đó có chứa 1 button để save trạng thái của Form chính, trong đó Form chính còn chứa thêm các thuộc tính như màu sắc, font chữ,… Chẳng hạn nhé, chúng ta có 1 chương trình, người dùng mở lên, thao tác “tá lả âm binh” trên đó như thay đổi màu sắc phông chữ, thay đổi màu nền,… sau đó họ thoát ra, và bạn phải làm sao để lúc họ mở lại, những thay đổi của người dùng không bị biến mất. Làm sao đây? Đây là lúc chúng ta sử dụng đến “RegistryKey” vừa quen biết.
Giả sử, chúng ta đã xây dựng Form xong rồi nhé, và có đầy đủ các thuộc tính, hãy thử phá Form này thoải mái.Yeah, ok. Xong! Bây giờ chúng ta dùngRegistry.SetValue() để lưu lại mấy cái phá hoại của người đó.
[PHP] private void FileSave_Cliked(object sender, EventArgs e) // tình huống clicked của button Saved
{
RegistryKey regKey = Registry.CurrentUser;
regKey = regKey.CreateSubkey(“Software\\C#\\UngDung”);
regKey.SetValue(“CurrSize”,currFontSize);
regKey.SetValue(“CurrColor”,currColor.Name);
}


Nếu bây giờ người sử dụng cho màu hiện hành về màu Blue và kích thước Font chữ là 30. Thì những thông tin này sẽ được lưu trongHKEY_CURRENT_USER\Software\C#\UngDung
Vậy là xong phần lưu thông tin, bây giờ giải quyết việc đọc thông tin đã lưu bằng cách dùng hàm GetValue(). Cụ thể như đoạn code dưới đây:
 RegistryKey regKey = Registry.CurrentUser;
regKey = regKey.CreateSubkey(“Software\\C#\\UngDung”);
//đọc vào dữ liệu rồi gán cho biến tình trạng
currFontSize = (int) regKey.GetValue(“CurrSize”,currFontSize);
string c = (string) regKey.GetValue(“CurrColor”,currColor.Name);
currColor = Color.FromName( c );
BackColor = currColor;