RSS

Category Archives: SEM 2

Mảng trong C#

1. Giới thiệu về mảng trong C#

– Trong chương trình đôi khi chúng ta cần thực hiện lưu trữ một loạt các thông tin có cùng kiểu dữ liệu để làm điều này thường chúng ta sẽ phải khai báo rất nhiều biến tương ứng với mỗi một thông tin như vậy. Việc quản lý số lượng lớn các biến gây ra rất nhiều khó khăn. Để giải quyết các khó khăn này thì C# cũng như các ngôn ngữ lập trình khác cung cấp một kiểu cấu trúc dữ liệu cho phép quản lý các biến có cùng tên, cùng kiểu dữ liệu. Đó là mảng.

– Mảng là một tập hợp hữu hạn các phần tử có cùng kiểu dữ liệu. Có thể coi mảng là một cách quản lý danh sách các biến có cùng kiểu dữ liệu.

– Để khai báo mảng trong C# chúng ta sử dụng cú pháp:

[Kiểu dữ liệu] [ ] … [ ] [tên mảng];

Trong đó:

  • [Kiểu dữ liệu]: là bất kì một kiểu dữ liệu nào được hỗ trợ trong C#.
  • [Tên mảng]: là một định danh để phân biệt các mảng với các biến, các đối tượng khác.

Số lượng các cặp dấu [ ] : chỉ ra chiều của mảng.

  • Nếu có 1 dấu [ ] thì mảng là mảng 1 chiều [].
  • Nếu có 2 dấu [ ] thì mảng là mảng 2 chiều [][].
  • Nếu có 3 dấu [ ] thì mảng là mảng 3 chiều [][][].
  • ……………….
  • Nếu có n dấu [ ] thì mảng là mảng n chiều. [][]….[].

Ví dụ: Khai báo mảng 1 chiều lưu trữ phần tử nguyên có tên là x. int[] x;

– Khởi tạo mảng: là quá trình khai báo số lượng các phần tử của mảng và gán giá trị cho các phần tử đó. Để khởi tạo mảng trong C# chúng ta có các cách như sau:

Khai báo và chỉ ra số phần tử của mảng.

[Kiểu dữ liệu] [ ] [tên mảng] = new [Kiểu dữ liệu] [số lượng phần tử];
Ví dụ: khai báo một mảng số nguyên lưu trữ 20 phần tử.
int[] x = new int[20];

Khai báo sau đó mới khởi tạo số phần tử của mảng.

[Kiểu dữ liệu] [ ] [tên mảng];
[tên mảng] = new [kiểu dữ liệu] [số phần tử];

Ví dụ: khai báo một mảng số nguyên lưu trữ 20 phần tử.
int[] x;
x = new int[20];

Khai báo, chỉ ra số lượng các phần tử mảng và gán các giá trị ban đầu cho các phần tử mảng.

int[] x = new int[5] { 5, -7, 8, 1, 9 };

Khai báo, ko chỉ ra số lượng các phần tử mảng và gán giá trị cho các phần tử của mảng.

– Truy cập các phần tử mảng: một mảng là một danh sách các phần tử có cùng kiểu dữ liệu, các phần tử đó được đánh số thứ tự bắt đầu từ 0 đến n-1 (Trong đó n là số phần tử của mảng).

– Như vậy để truy cập đến 1 phần tử của mảng thì chúng ta sử dụng một số nguyên để chỉ ra số thứ tự của phần tử đó trong mảng, phần tử nguyên này được gọi là chỉ số (index).

– Cú pháp tổng quát để truy cập đến phần tử thứ i của mảng là: [tên mảng] [i-1];

Ví dụ : gán giá trị -9 cho phần tử thứ 3 của mảng : x[2] = -9;

– Duyệt qua các phần tử mảng. Kể từ khi mảng là một tập hợp các hữu hạn phần tử do đó để duyệt qua các phần tử mảng thường chúng ta sử dụng vòng lặp for.

Ví dụ: in danh sách các phần tử mảng x ở trên.
Console.WriteLine("Danh sach cac phan tu trong mang:");
for (int i = 0; i < 5; i++)
Console.Write(x[i] + "\t");

2. Các kiểu mảng trong C#

Có 3 kiểu mảng trong C#:

– Mảng 1 chiều (single-dimension array): mảng 1 chiều là một mảng các phần tử. Mảng 1 chiều được khai báo chỉ bao gồm 1 cặp dấu [ ].

– Mảng nhiều chiều (multi-dimension array): mảng nhiều chiều là mảng có số chiều từ 2 trở lên (có từ 2 cặp [ ] trở lên).

– Mảng nhọn (jagged array): mảng nhọn là một mảng của các mảng, trong đó kích thước của mỗi một mảng có thể khác nhau. Mảng nhọn cho phép chúng ta sử dụng bộ nhớ một cách tiết kiệm hơn.

 

Nguồn: vi-infotech.com

 
2 phản hồi

Posted by trên 12/22/2012 in .NET, C# Căn Bản, PCS, SEM 2

 

Kế thừa trong C#

1. Khái niệm Kế thừa

– Kế thừa là khả năng cho phép định nghĩa một lớp mới kế thừa từ lớp cha

– Sau đó sẽ xây dựng thêm các phương thức và thuộc tính riêng của lớp đó

– Lớp cha trong sự thừa kế gọi là lớp cơ sở

– Lớp con trong sự thừa kế gọi là lớp dẫn xuất

– Quan hệ “là 1″: Kế thừa được sử dụng thông dụng nhất để biểu diễn quan hệ “là 1″

Ví dụ: Sinh viên là một con người

Tam giác là một đa giác

– Kế thừa thường được dùng theo 2 cách:

  • Để phản ánh mối quan hệ giữa các lớp
  • Để phản ánh sự chia sẻ mã nguồn giữa các lớp

2. Cú pháp

Cú pháp định nghĩa lớp dẫn xuất

class [Tên lớp con] : [Tên lớp cha]
{
}

3. Thừa kế phương thức

3.1. Phương thức tạo lập (Constructor)

– Vì lớp dẫn xuất không thể kế thừa phương thức tạo lập của lớp cơ sở nên một lớp dẫn xuất phải thực thi phương thức tạo lập riêng của mình

– Nếu lớp cơ sở có một phương thức tạo lập mặc định thì phương thức tạo lập của lớp dẫn xuất được định nghĩa như cách thông thường

– Nếu lớp cơ sở có phương thức tạo lập có tham  số thì lớp dẫn xuất phải định nghĩa phương thức  tạo lập có tham số theo cú pháp sau:

TênLớpCon(ThamSốLớpCon):base(ThamSốLớpCha)
{
// Khởi tạo giá trị cho các thành phần của lớp dẫn xuất
}

3.2. Định nghĩa lại các phương thức ở lớp dẫn xuất

– Trường hợp derived class có property or method trùng tên với base class thì trình biên dịch sẽ có cảnh báo dạng như sau:
“keyword new is required on ‘LớpDẫnXuất.X’ because it  hides inherited member on ‘LớpCơSở.X ‘”.

– Để khắc phục việc này ta dùng từ khóa newngay câu lệnh khai báo thành phần đó.

– Từ khóa new trong trường hợp này có tác dụng che dấu thành phần kế thừa đó đối từ base class

– Nếu phương thức của derived class  muốn truy cập đến thành phần X của base class ?

– Sử dụng từ khóa base theo cú pháp:  base.X