Bài đăng nổi bật


Data Types Intro 


Data Types demo 


Data Types - Kiểu Dữ Liệu
Tất cả các ứng dụng lưu trữ và thao tác dữ liệu trong bộ nhớ của máy tính. C# hỗ trợ hai loại dữ liệu được sử dụng để thể hiện thông tin trong thế giới thực, loại giá trị và loại tham chiếu (value types và reference types).
Value types được gọi là loại giá trị, bởi vì chúng chứa giá trị thực của dữ liệu chúng lưu trữ. Ví dụ: bạn có thể có một kiểu int lưu trữ giá trị 3. Giá trị bằng 3 được lưu trữ trong biến mà bạn khai báo để giữ nó.
Ngoại trừ DateTime và string, ở phía dưới cái bàn kiểu dữ liệu được liệt kê là bí danh cho cấu trúc trong .NET đó đại diện các kiểu dữ liệu trong Microsoft .NET Framework.  Bất cứ nơi nào bạn có thể sử dụng int, bạn cũng có thể sử dụng System.Int32. Tôi sẽ đề cập đến các cấu trúc trong khóa học về thuật toán và cấu trúc dữ liệu ở loạt bài khác.
Các loại tham chiếu (reference types) còn được gọi là các đối tượng. Các kiểu tham chiếu được tạo từ các tệp lớp, được trình bày trong khóa học Lập trình hướng đối tượng trong khóa học C#.
Một kiểu tham chiếu lưu trữ một tham chiếu đến vị trí trong bộ nhớ của đối tượng. Nếu bạn đã quen thuộc với C / C ++ thì bạn có thể nghĩ đến một tham chiếu đến vị trí bộ nhớ giống như một con trỏ. C# không yêu cầu bạn sử dụng con trỏ.
Bảng sau đây cho thấy các loại giá trị được sử dụng phổ biến nhất.
Type
Description
Size (bytes)
.NET Type
Range
int
Whole numbers
4
System.Int32
-2,147,483,648 to 2,147,483,647
long
Whole numbers (bigger range)
8
System.Int64
-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
float
Floating-point numbers
4
System.Single
+/-3.4 x 10^38
double
Double precision (more accurate) floating-point numbers
8
System.Double
+/-1.7 x 10^308
decimal
Monetary values
16
System.Decimal
28 significant figures
char
Single character
2
System.Char
N/A
bool
Boolean
1
System.Boolean
True or false
DateTime
Moments in time
8
System.DateTime
0:00:00 on 01/01/0001 to 23:59:59 on 12/31/9999
string
Sequence of characters
2 per character
System.String
N/A



Để biết thêm thông tin, bạn có thể truy cập trang web MSDN, http://msdn.microsoft.com , để biết tài liệu về các loại dữ liệu được hỗ trợ C#.


Statements


Statements - Các câu lệnh
Trong C#, một câu lệnh được coi là một lệnh. Các câu lệnh thực hiện một số hành động trong mã của bạn như gọi một phương thức hoặc thực hiện các phép tính. Các câu lệnh cũng được sử dụng để khai báo các biến và gán giá trị cho chúng.
Câu lệnh được hình thành từ các dấu hiệu (tokens). Các mã thông báo này có thể là từ khóa, mã định danh (biến), toán tử và dấu kết thúc câu lệnh là dấu chấm phẩy (;). Tất cả các câu trong C# phải được chấm dứt bằng dấu chấm phẩy.
Thí dụ:
int myVariable = 2;
Trong ví dụ này, các mã là:
  • int
  • myVariable
  • =
  • 2
  • ;
int là kiểu dữ liệu được sử dụng cho biến có tên myVariable.
'=' Là toán tử gán và được sử dụng để đặt giá trị của myVariable thành 2.
Chữ số 2 được gọi là hằng số (literal value). Nói một cách đơn giản, hằng số có nghĩa là nó là vậy như những gì nó vốn có. Chữ số 2 không thể là bất cứ thứ gì ngoại trừ chữ số 2. Bạn không thể gán giá trị cho 2. Tuy nhiên, bạn có thể gán chữ số 2 cho một biến và đó là điều mà câu lệnh C# này đang làm.
Cuối cùng, câu lệnh kết thúc bằng dấu chấm phẩy.

Định danh


Định danh
Trong C#, mã định danh là tên bạn đặt cho các thành phần trong chương trình của bạn. Các thành phần trong chương trình của bạn bao gồm:
  • Namespaces - Không gian tên:  .NET Framework sử dụng các namespaces như một cách để tách các tệp lớp thành các nhóm hoặc danh mục có liên quan. nó cũng giúp tránh đặt tên xung đột trong các ứng dụng có thể chứa các lớp có cùng tên
  • Classes - Lớp: các lớp là bản thiết kế cho các kiểu tham chiếu (reference types). Chúng xác định cấu trúc mà một đối tượng sẽ thực hiện khi bạn tạo các thể hiện của lớp
  • Methods - Phương thức: được đề cập muộn hơn một chút trong khóa học, chúng là các phần chức năng riêng biệt trong một ứng dụng. Chúng tương tự như các hàm trong thế giới lập trình không hướng đối tượng
  • Variables -  Biến: đây là các mã định danh hoặc tên mà bạn tạo để giữ các giá trị hoặc tham chiếu đến các đối tượng trong mã của bạn. Một biến về cơ bản là một vị trí ô nhớ được đặt tên
Khi bạn tạo một biến trong C#, bạn phải cung cấp cho nó một kiểu dữ liệu. Kiểu dữ liệu cho trình biên dịch và kiểm tra cú pháp loại thông tin bạn dự định lưu trữ trong biến đó. Nếu bạn cố gắng gán dữ liệu không thuộc loại đó, các cảnh báo hoặc lỗi sẽ thông báo cho bạn về điều này. Đây là một phần của tính chất an toàn loại của C#.
Bạn có thể gán một giá trị cho biến tại thời điểm bạn tạo nó hoặc sau đó trong mã chương trình của bạn. C# sẽ không cho phép bạn sử dụng một biến chưa được gán để giúp ngăn chặn dữ liệu không mong muốn được sử dụng trong ứng dụng của bạn. Mẫu mã sau đây cho thấy việc khai báo một biến và gán giá trị cho nó.
int myVar = 0;
C# có một số hạn chế xung quanh số nhận dạng mà bạn cần phải biết.
Trước hết, định danh phân biệt chữ hoa chữ thường (case-sensitive) vì C# là ngôn ngữ phân biệt chữ hoa chữ thường. Điều đó có nghĩa là các định danh như myVar, _myVar và myvar, được coi là định danh khác nhau.
Mã định danh chỉ có thể chứa các chữ cái (chữ hoa hoặc chữ thường), chữ số và ký tự gạch dưới. Bạn chỉ có thể bắt đầu một định danh bằng một chữ cái hoặc ký tự gạch dưới. Bạn không thể bắt đầu định danh bằng một chữ số. myVar và _myVar là hợp pháp nhưng 2Vars thì không.
C# có một bộ từ khóa dành riêng mà ngôn ngữ sử dụng. Bạn không nên sử dụng các từ khóa này như một định danh trong mã của mình. Bạn có thể chọn tận dụng case-sensitive của C# và sử dụng Double làm định danh để phân biệt với từ khóa double, nhưng đó không phải là cách tiếp cận được đề xuất.
Bảng sau đây chứa các từ khóa dành riêng C#.
abstract
as
base
bool break
byte
case
catch char
checked
class
const continue
decimal
default
delegate do
double
else
enum event
explicit
extern
false finally
fixed
float
for foreach
goto
if
implicit in
in (generic modifier)
int
interface internal
is
lock
long namespace
new
null
object operator
out
out (generic modifier)
override params
private
protected
public readonly
ref
return
sbyte sealed
short
sizeof
stackalloc static
string
struct
switch this
throw
1
try typeof
uint
ulong
unchecked unsafe
ushort
using
virtual void
volatile
while


Operators


Operators
Khi viết mã C#, bạn sẽ thường sử dụng các toán tử. Toán tử là một mã để thực hiện các phép toán trên một hoặc nhiều toán hạng trong một biểu thức. Một biểu thức có thể là một phần của câu lệnh, hoặc toàn bộ câu lệnh. Những ví dụ bao gồm:
3 + 4 - biểu thức là kết quả khi thực hiện hằng số 4 cộng với hằng số 3
counter++ - biểu thức sẽ làm cho biến (counter) được tăng lên một đơn vị
Không phải tất cả các toán tử đều phù hợp với tất cả các loại dữ liệu trong C#. Ví dụ, trong phần trước danh sách toán tử + được sử dụng để tính tổng hai số. Bạn có thể sử dụng cùng một toán tử để kết hợp hai chuỗi thành một, chẳng hạn như:
“Tom” + “Sawyer” nó sẽ tạo ra một chuỗi mới TomSawyer
Tuy nhiên, bạn không thể sử dụng toán tử gia tăng (++) trên chuỗi. Nói cách khác, ví dụ sau sẽ gây ra lỗi trong C#.
“Tom”++
Bảng sau liệt kê các toán tử C# theo loại.
Type
Operators
Arithmetic
+, -, *, /, %
Increment, decrement
++, --
Comparison
=, !=, <, >, <=, >=, is
String concatenation
+
Logical/bitwise operations
&, |, ^, !, ~, &&, ||
Indexing (counting starts from element 0)
[ ]
Casting
( ), as
Assignment
, +=, -=, =, /=, %=, &=, |=, ^=, <<=, >>=, ??
Bit shift
<<, >>
Type information
sizeof, typeof
Delegate concatenation and removal
+, -
Overflow exception control
checked, unchecked
Indirection and Address (unsafe code only)
*, ->, [ ], &
Conditional (ternary operator)
?:


Data Type Conversion


Chuyển đổi dữ liệu - Data Conversions
C# hỗ trợ hai loại chuyển đổi (casting) cho các kiểu dữ liệu, ngầm định và tường minh (implicit and explicit). C# sẽ sử dụng chuyển đổi ngầm trong trường hợp có thể, chủ yếu là trong trường hợp khi chuyển đổi sẽ không dẫn đến mất dữ liệu hoặc khi có thể chuyển đổi với loại dữ liệu tương thích. Sau đây là một ví dụ về chuyển đổi dữ liệu ngầm (implicit).
Chuyển đổi từ các loại kiểu nhỏ hơn sang lớn hơn:
int myInt = 2147483647;
long myLong= myInt;
Loại long có kích thước 64 bit trong bộ nhớ trong khi loại int sử dụng 32 bit. Do đó, độ dài có thể dễ dàng chứa bất kỳ giá trị nào được lưu trữ trong kiểu int. Tuy nhiên, việc chuyển từ long sang int có thể dẫn đến mất dữ liệu và bạn nên sử dụng ép kiểu tường mình (explicit) cho điều đó nếu bạn biết dữ liệu nào sẽ bị mất và nó không ảnh hưởng đến mã của bạn.
Ép kiểu tường minh được thực hiện theo một trong hai cách như được trình bày với đoạn code sau đây.
double myDouble = 1234.6;
int myInt;
// Cast double to int by placing the type modifier ahead of the type to be converted
// in parentheses
myInt = (int)myDouble;

Tùy chọn thứ hai là sử dụng các phương thức được cung cấp trong các Nền tảng .NET.
double myDouble = 1234.6;
int myInt;
// Cast double to int by using the Convert class and the ToInt32() method.
// This converts the double value to a 32-bit signed integer
myInt = Convert.ToInt32(myDouble);
Bạn sẽ tìm thấy nhiều phương thức khác trong lớp Convert chuyển sang các kiểu dữ liệu tách rời khác nhau như ToBoolean (), ToByte (), ToChar (), v.v.
Phương thức Convert.ToInt32 () cũng có thể được sử dụng để truyền một chuỗi ký tự thành kiểu dữ liệu số. Ví dụ: bạn có thể có ứng dụng dựa trên GUI - trong đó người dùng sẽ nhập dữ liệu vào hộp văn bản (text boxes). Các giá trị này là các giá trị chuỗi khi được truyền cho mã trong ứng dụng của bạn. Việc sử dụng phương pháp trên để ép chuỗi thành số có thể giúp ngăn chặn các ngoại lệ trong mã của bạn khi cố gắng sử dụng loại dữ liệu sai trong một phạm vi cụ thể.
C# cũng cung cấp một cơ chế khác để đối phó với việc ép kiểu. Việc sử dụng phương thức TryParse() và phương thức Parse() cũng có thể giúp ép kiểu tốt. Các phương thức này được gắn vào các loại trong C# chứ không phải là lớp Convert. Ví dụ sau sẽ giúp chứng minh.
// TryParse() example
bool result = Int32.TryParse(value, out number);

// Parse() example
int number = Int32.Parse(value);

Trong ví dụ về TryParse(), phương thức trả về kết quả Boolean cho biết nếu chuyển đổi thành công. Trong ví dụ Parse(), nếu chuyển đổi không thành công, một ngoại lệ sẽ được đưa ra.

Post a Comment

أحدث أقدم