Thứ Hai, 9 tháng 3, 2009

C# căn bản _ phần I

Trong bài này chúng ta sẽ tìm hiểu các vấn đề căn bản của ngôn ngữ C# sau :

* · Khai báo biến hệ thống kiểu dữ liệu trong C#.
* · Cú pháp lệnh và các khái niệm trong C#.



1. Khai báo biến và hệ thống kiểu dữ liệu trong C#.

C# định nghĩa 7 kiểu biến, bao gồm: static variables, instance variables, array elements, value parameters, reference parameters, output parameters, và local variables.

Ví dụ sau sẽ miêu tả 7 kiểu biến đó :

class A
{
public static int x;
int y;
void F(int[] v, int a, ref int b, out int c) {
int i = 1;
c = a + b++;
}
}

x là một static variable, y là một instance variable, v[0] là một array element,
a là một tham số truyền theo giá trị(value parameter), b là một tham chiếu (reference parameter), c là một tham số output, và i là một biến cục bộ.

Trong C#, biến (variable), phương thức (method) chúng ta gọi chung là member.

Cấu trúc : [access modifier] [DataType] [VariableName]

Access modifier (bổ từ truy cập) : định nghĩa mức độ (hay phạm vi) truy cấp của member.

DataType : Kiểu dữ liệu trong C#.

Ví dụ :

public int iCount ;

private string sFullName ;

Access modifier


Mô tả

Public


Member có thể được gọi hay truy cập từ bất kỳ chỗ nào trong ứng dụng

Protected


Member chỉ được truy cập trong phạm vi lớp (class) hiện tại và lớp kế thừa.

Private


Member chỉ được truy cập trong phạm vi lớp (class) hiện tại.

Internal


Memner chỉ được truy cập trong gói (assembly) hiện tại.

Protected internal


Member chỉ được truy cập ở gói hiện tại và của kiểu dẫn xuất từ lớp.

Kiểu dữ liệu


Mô tả


Ví dụ

object


Lớp cơ sở của tất cả các kiểu dữ liệu trong C#.


object o = null ;

string


Dãy các ký tự ở dạng Unicode


string sName = “Le Ha” ;

int


Số nguyên có dấu 32 bit


int iCout = 1;

long


Số nguyên có dấu 64 bit


float


Số chấm động


float fHeight = 1.25 ;

char


Kiểu ký tự Unicode


char c = ‘a’ ;

bool


Kiểu logic (true hoặc false)


bool bFlag = true ;

double


Số chấm động


· Bảng trên là một số kiểu dữ liệu phổ biến mà C# định nghĩa sẵn cho người lập trình, nhưng đôi khi chúng ta cũng cần tự định nghĩa một cấu trúc dữ liệu theo ý mình và C# cung cấp cho ta một vài khái niệm để thực hiện điều này, đó là Struct và Enumerators.



Struct :

Cú pháp : Struct [name]

{

[Access-modifier] member;

}

Ví dụ :

Struct phanso

{

public int tuso ;

public int mauso ;

public void Print()

{

Console.Write (“phân số là : {0} / {1}”, tuso, mauso);

}

}

Public static void Main()

{

phanso p1;

p1.tuso = 1;

p1.tuso = 2;

p1.Print();

}

Kết quả trên màn hình console là 1/2.

Nếu bạn đã từng biết C++ thì có thấy một khác biệt đó là Struct trong C# cho phép viết cả phương thức trong nó. Kiểu struct hữu ích khi ta muốn tạo ra các object giống class nhưng cần truy xuất nhanh mà không cần khởi tạo object.

Enumerator :

Cú pháp : enum [name]

{

Value_1,

Value_2,

………,

Value_n

}

Ví dụ :

public class Holiday

{

Public enum Weekdays

{

Monday,

Tuesday,

Friday

}

}

Public static void Main()

{

Holiday h = new Holiday();

Console.Writeline(“My holiday is :” + h.Friday );

}

Hữu ích khi bạn dùng để liệt kê một loạt các giá trị, kiểu enum thuận lợi cho việc tạo danh sách có giá trị xác định.

· Các đối tượng thuộc 1 kiểu dữ liệu có thể được chuyển đổi sang một kiểu dữ liệu khác qua cơ chế chuyển đổi tường minh hoặc chuyển đổi ngầm định. việc chuyển đổi ngầm định được thực hiện tự động và phải đảm bảo không mất thông tin. Nghĩa là kiểu được chuyển đổi phải có kích thước lơn hơn.

Ví dụ : ta có thể gán ngầm định một số kiểu short vào một số kiểu int nhưng không thể ngược lại vì kích thước của kiểu int lớn hơn kích thước của kiểu short.

Cách ép kiểu đúng :

short x = 1 ;

int y = x ;

Cách ép kiểu sai :

short x ;

int y = 1 ;

x = y;

Phải ép kiểu tường minh như sau

short x ;

int y = 1 ;

x = (short)y;

2. Cú pháp lệnh và các khái niệm trong C#.

Ø Lớp (class) và đối tượng (objects) trong C#

Class là một khái niệm mô tả cho những thực thể có chung tính chất và hành vi. Class định nghĩa những thuộc tính và hành vi được dùng cho những đối tượng của lớp đó. Có thể nói Class là một khuôn mẫu cho các đối tượng.

Công thức để tạo một class

AccessModifier class [className]

{

// code

}

Đối tượng (Objects) là một đại diện, hay có thể nói là một sản phẩm của một class. Tất cả các đối tượng đều có chung những thuộc tính và hành vi mà class định nghĩa. Cách tạo đối tượng giống như cách tạo một biến có kiểu dữ liệu là Class.

Ví dụ : theo văn nói ta có thể mô tả như sau, một chiếc ô tô có những bộ phận như khung xe, màu xe, động cơ …, tất cả thông tin ấy được mô tả trong 1 class. Dựa trên mô tả đó, nhà sản xuất đưa ra được các mẫu xe khác nhau như có chiếc khung xe bằng thép, màu đỏ, động cơ BH-240 …, có chiếc khung lại bằng hợp kim nhôm, màu đen ….; tóm lại dựa trên class xe, sẽ có nhiều object xe khác nhau …

Hàm tạo (Constructors) và hàm hủy (Destructors) trong C#

Constructors là những hàm đặc biệt cho phép thực thi, điều khiển chương trình ngay khi khởi tạo đôi tượng. Trong C#, Constructors có tên giống như tên của Class và không trả lại giá trị. Một class có thể có nhiều contructor.

Ví dụ

class Oto

{

private string Color;

//Constructor

public Library()

{

Color = “White”;

}

public Oto(string value)

{

I Color = value;

}

}

Khi khởi tạo một object từ class này, nếu bạn không truyền tham số thì oto (object) này sẽ có color = “white” ngay khi nó được khởi tạo :

Oto oto_1 = new Oto(); // color là White

Do class cung cấp contructor cho phép gán giá trị color cho object khi được khởi tạo, nên bạn có thể tạo color cho object này ngay trong lệnh khởi tạo :

Oto oto_1 = new Oto(“Red”); // color lúc này là Red

Decontructor



Là một hàm đặc biệt được sử dụng để làm sạch bộ nhớ. Cách khai báo giống như Constructor nhưng không có tham số và được bắt đầu bằng dấu “~”. Bên trong thân Destructors, ta có thể dùng các lệnh giúp giải phóng bộ nhớ như hủy các kết nối đến database, đóng các luồng dữ liệu …

Ø Khái niệm namespace (không gian tên)

Nếu đã học Java bạn có thể hiểu namespace có ý nghĩa tương tự như package. Namespace giúp đóng việc đóng gói các class, các interface và các struct có liên quan thành một unit (đơn vị).

Cú pháp :

namespace namespace-name

{
// classes, interfaces, structs,...
}

Để khai báo sử dụng namespce ta dungf từ khóa using;

Ví dụ : using System ;

using System.Data ;

Hãy xem xét một ví dụ về cách sử dụng namespace trong lập trình. Chúng ta sẽ thấy có hai lớp Money đồng nhất trong khai báo và cài đặt, tuy nhiên C# xét chúng là hai lớp rõ rệt phân biệt bởi namespace khác nhau.

· Tác giả: Richard L. Week

· Mục đích: Làm rõ hơn về namespace (không gian tên)

CODE
using System;

namespace Foo

{
public class Money

{
private double m_Amount;
public Money()

{
Init(0.0);
}
public Money(double Amount)

{
Init(Amount);
}
public void Print()

{
Console.WriteLine("Foo.Money.Print{0}", m_Amount);
}
public void Init(double Amount)

{
m_Amount = Amount;
}
}
}

namespace Bar

{
public class Money

{
private double m_Amount;
public Money()

{
Init(0.0);
}
public Money(double Amount)

{
Init(Amount);
}
public void Print()

{
Console.WriteLine("Bar.Money.Print{0}", m_Amount);
}


public void Init(double Amount)

{
m_Amount = Amount;
}
}
}

public class NamespaceTest

{
public static void Main()

{
Foo.Money fm=new Foo.Money(5.00);
Bar.Money bm=new Bar.Money(5.00);
fm.Print();
bm.Print();
}
}

Có hai namespace đã được tạo ra là Foo và Bar. Một lớp Money tồn tại trong mỗi namespace. Để sử dụng mỗi lớp Money, trong phương thức Main của lớp NamespaceTest tạo một thể hiện của mỗi lớp bằng tên đầy đủ. Nếu có nhiều đối tượng có cùng tên thuộc về những namespace khác nhau, sử dụng tên đầy đủ thì hay hơn là dùng chỉ thị using.

(Còn tiếp ...)

Không có nhận xét nào: