home screen

Search



Number Of Result : 0

Result :


Tuesday, July 8, 2008

New Feature in C# 3.5 - Part1

1. Biến đối tượng ngầm ẩn
1.1 Thuận lợi
Nếu như ai có diệp làm quen với ngôn ngữ thông dịch( javascript , PHP ) thì các bạn sẽ biết 1 loại kiểu dữ liệu : var. Đây là kiểu dữ liệu ngầm ẩn nó có thể chứa bất cứ đối tượng nào. Và đặc trưng mới của C# 3.0 chính là loại kiểu dữ liệu này.
Đoạn code C# 2.0 trở về trước

int myInt = 0;
bool myBool = true;
string myString = "Vo xuan vinh";


Console.WriteLine("myInt is a: {0}", myInt.GetType().Name);
Console.WriteLine("myBool is a: {0}", myBool.GetType().Name);
Console.WriteLine("myString is a: {0}", myString.GetType().Name);



int []evenNumbers = new int[] { 2, 4, 6, 8 };
// Here, var is really a System.Int32.
foreach (int item in evenNumbers)
{
Console.WriteLine("Item value: {0}", item);
}


Và code C# 3.0 với kiểu đối tượng ngầm ẩn

var myInt = 0;
var myBool = true;
var myString = "Vo xuan vinh";

// Print out the underlying type.
Console.WriteLine("myInt is a: {0}", myInt.GetType().Name);
Console.WriteLine("myBool is a: {0}", myBool.GetType().Name);
Console.WriteLine("myString is a: {0}", myString.GetType().Name);


// Use 'var' in a standard for each loop.
var evenNumbers = new int[] { 2, 4, 6, 8 };
// Here, var is really a System.Int32.
foreach (var item in evenNumbers)
{
Console.WriteLine("Item value: {0}", item);
}

Trong ví dụ này có loại dữ liệu rất lạ mà chúng ta chưa hề gặp ở bất cứ ngôn ngữ biên dịch nào. Đó là kiểu dữ liệu var. Trong trường hợp trên thì compiler nó sẽ hiểu được myInt là kiểu System.Int32, myBool la kiểu System.Boolean, kiểu myString là kiểu System.String.
Tương tự ta cũng có thể gán vào biến var với bất kỳ kiểu đối tượng nào

var arrayINT = new int[] { 2 , 4 , 6 } ;
var grapeFruit = new GrapeFruit() ;

1.2 Hạn chế
- Nó ko được dùng làm data member của 1 Class
- Nó không được dụng cho KDL trả về hay tham số của hàm

class Grapefruit
{
// Error! var cannot be used as field data!
private var name = "voxuan vinh";

// Error! var cannot be used as return values
// or parameter types!
public var Function()
{
return "";
}
}

- Đối tượng KDL var phải được gán ngay tại thời điểm khai báo.


//Phương thức sử dụng var ko hợp lệ
public void Method()
{
error! it must to be assigned a value
var mydata;
}


//Phương thức sử dụng var hợp lệ
public void Method()
{
var mydata = "voxuvi";
}

- Không được gán đối tượng NULL mà phải gán 1 đối tượng cụ thể. Tuy nhiên đối tượng KDL var sau khi gán đối tượng cụ thể nào đó rồi sau đó gán lại NULL, điểu đó hợn lệ.

//Error! can't assign null
var myObj= null ;

//it's ok
var myObj = new Grapefruit() ;
myObj = null;
//sau khi gán đối tượng cụ thể xong thì có thể gán null được;

- Không được đặt tên biến là var

//compile error
int var = 5 ;

- Không được gán kiểu khác với KDL mà đối tượng đang giữ

var str = "voxuvi" ; //ok
str = "vixuvo" ;//ok
str = 4 ; //not ok. Complie error


2 . Array trong kiểu đối tượng ngầm ẩn

//intArray is really int[]
var intArray = new[] { 1, 2, 3 };

//doubeArray is really double[]
var doubeArray = new[] { 1, 2.5, 3.6 };

//stringArray is really string[]
var stringArray = new[] { "vo", "xuan", "vinh" };


//grapesArray is really GrapeFruit[]
var grapesArray = new[] { new GrapeFruit(), new GrapeFruit() };


//error! Mixed types
var errorVar = new[] { 1, "vo", 2, "xu", 3, "vi" };



trackback URL : http://msdn.microsoft.com/en-us/magazine/cc163400.aspx

2 comments:

Tigger said...

Viết có nhiêu đây, mắc công vô coi, thằng quỷ! :D

Vinh Vo Xuan said...

đang demo ba ơi ^^