Cấp bậc tác giả:

TRAINING

Bài Giảng .Net(P2-Giới thiệu ngôn ngữ lập trình C#)

Được viết bởi QuangIT ngày 23/09/2012 lúc 05:59 PM
Mục tiêu bài học Kết thúc chương này, bạn có thể: - Hiểu được cơ bản về C#.NET - Nắm vững kiến thức C#.NET - Có thể Code được C#
  • 0
  • 16447

Bài Giảng .Net(P2-Giới thiệu ngôn ngữ lập trình C#)

Mục tiêu bài học
Kết thúc chương này, bạn có thể:
- Hiểu được cơ bản về C#.NET
- Nắm vững kiến thức C#.NET
- Có thể Code được C#

Các bài giảng xuyên suốt:

Nội dung:
3. Làm việc với Winforms, Các điều kiện của Winforms, Phát triển giao diện người dùng, Bắt lỗi trong Winforms.
4. Các ứng dụng MDI.

Các mục chính của phần này:
- Cấu trúc chương trình
- Các kiểu dữ liệu nguyên thủy
- Kiểu dữ liệu
- Biến và hằng
- Biểu thức và các phép toán
- Các cấu trúc lệnh điều khiển

1. Cấu trúc chương trình:
program.jpg
Một chương trình C#
 program2.jpg
Chương trình gồm có:
- Lớp MyApp:
Chứa hàm Main để chạy chương trình
- Lớp Apparel
Chứa dữ liệu 
Các tính năng chính:
- Câu lệnh using:
Xác định namespace
- Định nghĩa kiểu
Kiểm soát việc truy cập
- Hàm Main()
Điểm truy cập vào ứng dụng
Chú thích trong C#
//   chú thích cho một dòng
/*   chú thích cho một hoặc nhiều dòng             
….
*/
/// <remarks> chú thích XML mô tả một lớp </remarks> 

2. Các kiểu dữ liệu nguyên thủy:
kieudulieu.jpg
Ví dụ về các kiểu dữ liệu
System.Int32 age = new System.Int32(17);
int age = 17; 
System.Int32 age = 17; 
short i16 = 50; 
Chú ý
- Ép kiểu
Gán biến có giá trị thuộc kiểu có giới hạn nhỏ sang kiểu có giới hạn lớn hơn và ngược lại
short i16 = 50;     // 16-bit integer
int i32 = i16;     // Đúng: int có độ chính xác lớn hơn
i16 = i32;         // Sai: short is 16 bit, int is 32
i16 = (short) i32; // Đúng vì việc ép kiểu được sử dụng 
- Các giá trị có thêm các chữ cái được dùng cho các kiểu float, double, và decimal 
decimal pct = .15M;     // M is required for literal value 
decimal
- Kiểu số thực có độ chính xác đến 128 bit
- Cung cấp 28 chữ số thập phân
- Luôn có hậu tố M thêm vào cuối giá trị được gán
Ví dụ:
decimal iRate = 3.9834M;         // decimal requires M 
iRate = decimal.Round(iRate,2);  // Returns 3.98
decimal dividend = 512.0M;
decimal divisor = 51.0M;
// Câu lệnh tiếp trả về remainder = 2
decimal p = decimal.Parse("100.05"); 
decimal rem = decimal.Remainder(dividend,divisor); 
bool
- Kiểu bool chỉ có hai giá trị là true và false.
- Không thể ép một giá trị bool sang một số nguyên —ví dụ, chuyển true thành 1, hay chuyển 1 hoặc 0 thành bool.
Ví dụ:
bool bt = true;
string bStr = bt.ToString(); // trả về "true"
bt = (bool) 1;               // sai 
char
- hiển thị một ký tự Unicode 16-bit
- được sử dụng như là một số nguyên không dấu 
- Một số cách gán hợp lệ
Một ký tự đặt giữa hai dấu ' '
Một giá trị số ép sang kiểu char 
Ký tự escape
Ví dụ
myChar =  'B';       // 'B' has an ASCII value of 66
myChar = (char) 66;  // Equivalent to 'B‘
myChar = '\u0042';   // Unicode escape sequencemy
Char = '\x0042';   // Hex escape sequencemy
Char = '\t';     // Simple esc sequence:horizontal tab
bool bt;
string pattern = "123abcd?“;
myChar = pattern[0];                     // '1‘
bt = char.IsLetter(pattern,3);         // true  ('a')
bt = char.IsNumber(pattern,3);     // false
bt = char.IsLower(pattern,0);         // false ('1')
bt = char.IsPunctuation(pattern,7);   // true  ('?') 
…….
byte, sbyte
- Một byte là một số nguyên không dấu 8-bit có giá trị từ 0 đến 255. 
- Một sbyte là một số nguyên có dấu 8-bit có giá trị từ –128 đến 127.
Ví dụ: 
byte[] b = {0x00, 0x12, 0x34, 0x56, 0xAA};
string s = b[4].ToString(); 
// returns 170
char myChar = (char) b[3]; 
short, int, long
- Các kiểu trên lần lượt đại diện cho số nguyên có dấu 16-, 32-, và 64-bit. 
- Các phiên bản không dấu của các kiểu này cũng có mặt như ushort, uint, ulong.
Ví dụ:
short i16 = 200;
i16 = 0xC8 ;     // hex value for 200
int i32 = i16;   // không yêu cầu ép kiểu
single, double
Đây là các kiểu số thực có độ chính xác đơn 32-bit và độ chính xác kép 64-bit. Trong .NET 1.x, single chính là kiểu float.
- Kiểu single có khoảng giá trị từ 1.5 x 10 –45 đến 3.4 x 1038 với độ chính xác 7 chữ số thập phân.
- Kiểu double có khoảng giá trị từ 5 x 10–324 đến 1.7 x 10308 với độ chính xác từ 15- đến 16- chữ số thập phân.
- Phép toán Floating-point trả về NaN (Not a Number) để báo hiệu rằng kết quả của phép toán là không xác đinh. Ví dụ, chia 0.0 cho 0.0 sẽ có kết quả NaN.
- Sử dụng phương thức System.Convert khi ta chuyển đổi một số kiểu số thực sang một kiểu khác. 
- Hậu tố F được dùng khi gán một giá trị chữ cho một kiểu single, và D được chọn cho kiểu double. 
Ví dụ về single, double
float xFloat = 24567.66F;
int xInt = Convert.ToInt32(xFloat);  // returns 24567
int xInt2 = (int) xFloat;
if(xInt == xInt2) {  }               // Falsestring 
xStr = Convert.ToString(xFloat);
single zero = 0;
if (Single.IsNaN(0 / zero)) {  }     // True
double xDouble = 124.56D; 
Sử dụng Parse và TryParse để chuyển đổi một chuỗi giá trị số
- Các kiểu số nguyên thủy chứa các phương thức Parse và tryParse dùng để chuyển đổi một chuỗi các số sang một kiểu số xác định. 
Ví dụ:
short shParse  = Int16.Parse("100");
int iParse         = Int32.Parse("100");
long lparse      = Int64.Parse("100");
decimal dParse = decimal.Parse("99.99");
float sParse       = float.Parse("99.99");
double dbParse = double.Parse("99.99"); 
- TryParse cung cấp việc chuyển kiểu có điều kiện. 
- Trả về một giá trị boolean cho biết việc chuyển kiểu thành công hay không -> cung cấp một cách để tránh các đoạn mã điều khiển các ngoại lệ. 
Ví dụ sau dùng một kiểu Int32 để thể hiện hai hình thức của tryParse:
int result;// parse string and place result in result parameter
bool ok = Int32.TryParse("100", out result); 
bool ok = Int32.TryParse("100", NumberStyles.Integer, null,out result);
Trong hình thức thứ hai của phương thức này, tham số đầu tiên là chuỗi cần chuyển kiểu, tham số thứ hai là một kiểu liệt kê NumberStyles mô tả điều mà chuổi đầu vào có thể chứa. Giá trị được trả về trong tham số thứ tư của phương thức. 

Kiểu dữ liệu:
Tính tương thích giữa các kiểu dữ liệu đơn giản
kieudulieu2.jpg
3. Toán Tử:
Toán tử số học
toantu.jpg
toantu2.jpg
Toán tử điều kiện, quan hệ
toantu3.jpg
Chú ý trong toán tử điều kiện, quan hệ
Phép toán && sẽ không đánh giá biểu thức thứ hai nếu biểu thức đầu tiên mang giá trị false.
Phép toán || sẽ không đánh giá biểu thức thứ hai nếu biểu thức đầu tiên mang giá trị true. 
Toán tử & và | sẽ luôn đánh giá cả hai biểu thức. Chúng được dùng khi các giá trị của biểu thức được trả về từ một phương thức và bạn muốn chắc chắn rằng các phương thức đó được gọi. 
Phép toán ?: cho phép gán một giá trị vào một biến trong khi kiểm tra điều kiện. 
Ví dụ: (ta có thể xem phép toán này là một cách rút gọn của câu lệnh if-else)
string pass;
int grade=74;
If(grade >= 70) pass="pass"; 
else pass="fail";
//    expression   ? op1  : op2
pass = (grade >= 70)  ? "pass" : "fail";
Nếu biểu thức là true, phép toán ?: sẽ trả về giá trị đầu tiên; nếu giá trị là false, giá trị thứ hai sẽ được trả về. 
4. Các câu lệnh điều khiển
So sánh cấu trúc if và switch
if.jpg
switch.jpg

if-else
if ( biểu thức logic ) câu lệnh
if ( biểu thức logic ) câu lệnh1 
else câu lệnh2 
switch
switch( biểu thức ) {khối lệnh switch} 
Biểu thức: kiểu int, kí tự hay chuỗi
Câu lệnh if...else
ifelse.jpg
Câu lệnh chọn switch
switch2.jpg
Chú ý trong câu lệnh switch
- Không cho phép thực hiện liên tiếp khối lệnh case này đến khối tiếp theo.Mỗi khối case phải được kết thúc với một câu lệnh điều khiển dịch chuyển đến một điểm nào đó. Các câu lệnh này có thể là break, goto hay câu lệnh return.
- Nhiều nhãn case có thể liên quan đến một khối mã trong câu lệnh.
- Câu lệnh switch luôn phân biệt chữ hoa và chữ thường; trong ví dụ trên, "Cotton" và "COTTON" được dùng như hai giá trị hoàn toàn khác nhau. 
5. Vòng lặp:
- C# cung cấp bốn câu lệnh lặp sau: while, do, for, và foreach. 
Câu lệnh đầu tiên có cấu trúc giống với câu lệnh tương tự trong C, C++, và Java; 
Câu lệnh foreach được thiết kế để thực hiện việc lặp trong các tập của dữ liệu như các mảng chẳng hạn.
Vòng lặp while
Cú pháp
while ( boolean expression ) { body } 
Các câu lệnh trong thân của vòng lặp được thực hiện cho đến khi biểu thức boolean có giá trị false. 
Vòng lặp sẽ không thực hiện nếu biểu thức có giá trị ban đầu là false. 
Ví dụ:
byte[] r = {0,1,2,3,4,5,6};
int ndx=0;
int totVal = 0;
while (ndx <=6) {  
totVal +=    r[ndx];      
ndx += 1;
Vòng lặp do..while
Cú pháp:
do { do-body } while ( boolean expression ); 
Tương tự như câu lệnh while ngoại trừ việc đánh giá được thực hiện ở cuối vòng lặp         -> vòng lặp này luôn thực hiện ít nhất một lần 
Ví dụ:
byte[] r = {0,1,2,3,4,5,6};
int ndx=0;
int totVal = 0;
do {  
totVal +=    r[ndx];      
ndx += 1;
} while (ndx <=6) ;
Vòng lặp for
Cú pháp:
for ( [initialization]; [termination condition]; [iteration] )     { for-body }  
Cấu trúc của vòng lặp for gồm:
điều kiện khởi tạo
điều kiện kết thúc
một câu lệnh lặp được dùng để thực hiện việc lặp
Tất cả đều là tùy chọn.
Điều kiện khởi tạo sẽ được thực hiện một lần, và sau đó điều kiện được kiểm tra; nếu giá trị trả về là True, việc lặp sẽ xảy ra sau khi phần thân được thực hiện.
Câu lệnh lặp thường là một lượng gia tăng đơn giản đến giá trị kiểm soát, nhưng cũng có thể là phép toán nào đó. 
Ví dụ:
int[] r = {8, 10, 20, 12, 18, 14, 13};
int totVal = 0;
for (int ndx = 0; ndx <= 6; ndx++) {
totVal += r[ndx];
Nếu bất kì mệnh đề nào trong câu lệnh for được đặt ra ngoài, chúng phải được tính ở một nơi nào khác trong đoạn mã. 

Ví dụ sau mô tả việc bỏ qua sự tăng/giảm giá trị trong vòng lặp for được xử lý:
for   (ndx = 0; ndx < 6; ){
  totVal += r[ndx];
  ndx++;          //việc tăng được thực hiện tại đây
Bạn cũng có thể bỏ tất cả trong câu lệnh for:
for (;;) { body }   
// tương đương với while(true) { body } 
Vòng lặp foreach
Cú pháp:
foreach ( type identifier in collection )  { body } 

Type và identifier biểu thị cho giá trị lặp.
Cấu trúc này lặp một lần cho mỗi phần tử trong tập hợp và các tập giá trị lặp đến giá trị của phần tử tập hợp hiện tại.
Giá trị lặp mang thuộc tính chỉ đọc, và một lỗi biên dịch sẽ xảy ra nếu chương trình cố gắng thiết lập lại giá trị của nó. 
Ví dụ:
int totVal = 0;
foreach (int arrayVal in r){
      totVal += arrayVal;
Lưu ý:
- Trong mảng một chiều, việc lặp bắt đầu với chỉ mục 0 và tăng dần theo thứ tự.
-  Trong mảng đa chiều, việc lặp xảy ra từ phía chỉ mục bên phải nhất. 
Cho ví dụ, trong mảng hai chiều, vòng lặp bắt đầu trong cột đầu tiên và di chuyển qua các dòng. Khi nó đã đến cuối, nó di chuyển đến dòng tiếp và cũng là tăng dần theo thứ tự của cột đầu tiên và lặp dòng đó. 
Sử dụng các cấu trúc điều khiển trong vòng lặp
Câu lệnh 
break;
Ý nghĩa
Thoát khỏi vòng lặp
Ví dụ
while (true) {
  ndx+=1;
  if (ndx >10) break;
Câu lệnh 
continue;
Ý nghĩa
Nếu điều kiện ngay trước câu lệnh trên là đúng
Tiếp tục thực hiện công việc trong thân vòng lặp.
Ngược lại
Thực lần lặp tiếp theo mà không thực hiện các lệnh sau nó trong thân vòng lặp. 
Ví dụ
while (ndx <10) {
     ndx +=1;
       if(ndx %2 ==1) continue;
       totVal += ndx;
Câu lệnh 
goto identifier;
goto case exp;
goto default;
Ý nghĩa
Dịch chuyển dòng điều khiển của chương trình đến một nhãn, một câu lệnh case trong một khối switch, hay câu lệnh default trong khối switch đó. 
Ví dụ:
public int FindMatch(string myColor)
{
  string[] colorsAvail("blueaqua", "red", "green","navyblue");
  int loc;
  int matches=0;
  foreach (colorType in colorsAvail)
  {
    loc = colortype.IndexOf(myColor);
    if (loc >=0) goto Found;
         continue;
Found: 
     matches += 1;
  }   
  return(matches);
Câu lệnh 
return [expression] ; 
Ý nghĩa
Câu lệnh trả về một giá trị và gán cho phương thức chứa nó; return không có đối số nếu kiểu trả về của phương thưc là void  
Ví dụ
public double Area(double w, double l) 
  return w * l;
6. Chuỗi(String):
- Biểu diễn chuỗi
Dạng 1: câu chữ ở giữa các dấu nháy
Dạng 2: các chuỗi nguyên văn bắt đầu với @" và kết thúc với một dấu nháy kép (").
Sự khác nhau giữa hai kiểu này xảy ra ở cách chúng xử lý các ký tự escape:
- Các câu thông thường phản hồi lại ý nghĩa của các ký tự escape
- Các chuỗi nguyên văn xem chúng như kiểu văn bản thông thường. 
Bảng kí tự escape
chuoi.jpg
Một số ví dụ về chuỗi
string myQuote, path;
myQuote = @"The solution is in the problem.";
myQuote = "The solution\nis in the problem.";  
myQuote = "The Unicode representation of f is \u0066";
// Hai câu lệnh tiếp gán cùng giá trị cho myQuote.
myQuote = @"""The solution is in the problem. """;
myQuote = "\"The solution is in the problem. "";
// Hai câu lệnh sau gán cùng giá trị đến đường dẫn.
path    = @"c:\my documents\notes.txt";
path    = "c:\\my documents\\notes.txt";
path    = "c:\my documents\notes.txt";      // Sai 
Xử lý chuỗi
Đánh chỉ mục cho từng ký tự trong chuỗi 
// Example 1 – sử dụng câu lệnh foreach
string myQuote = "The solution is in the problem."; 
foreach (char cc in myQuote){   
Console.Write(cc.ToString());}
// Example 2 – sử dụng vòng lặp while
int ndx = 0;
while (ndx < myQuote.Length){
  Console.Write(myQuote[ndx].ToString());
  ndx += 1;
Nối chuỗi
Toán tử + được dùng để để nối hai chuỗi với nhau: s1 + s2 . 
Cho phép chỉ một trong hai phải là kiểu string; cái còn lại có thể là kiểu khác, và phương thức ToString của nó được gọi tự động để chuyển kiểu cho nó.
Ví dụ:
string s1 = "My age = ";
int myAge = 28;
string cat = s1 + myAge;       // My age = 28
MyClass clStr = new MyClass;    
Cat = "Class Name = " + clStr; // Class Name = MyClass 
Hãy xem ví dụ một văn bản được cấu trúc lại thông qua việc chèn thẻ <br> giữa hai đầu của tên trong danh sách.
// giả sử names là một mảng chứa 1000 tên khách hàng
string nameList = "";
foreach (string custName in names){   
// câu này không đầy đủ, ta nên tránh khi viết code.
nameList = nameList + custName+"<br>";
}
     Mỗi kết quả lặp giúp ta tạo một chuỗi mới chứa nhiều chuỗi trước đó cộng với một tên mới thêm vào và thẻ <br>. 
Sử dụng lớp StringBuilder: 
- nối(append) 
- chèn(insert) 
- xóa(delete)
- gỡ bỏ(remove)
Trích xuất và định vị các chuỗi con
- Phương thức Substring cho phép trích chuỗi theo vị trí trong một chuỗi. 
Hai hình thức của nó được minh họa trong đoạn mã sau:
string poem = "In Xanadu did Kubla Khan";
string poemSeg;
poemSeg = poem.Substring(10);     // did Kubla Khan
// tham số thứ hai xác định độ dài cần lấy của chuỗi 
conpoemSeg = poem.Substring(0,9);    // In Xanadu
- Phương thức IndexOf
- Xác định sự xuất hiện tiếp theo của một mẫu ký tự trong một chuỗi. 
- Tìm kiếm sự có mặt này từ đầu chuỗi hay một vị trí được chỉ định trước. 
- IndexOf() xử lý tìm kiếm có phân biệt ký tự hoa thường  nên chuyển chuỗi gốc sang chuỗi viết bình thường (ToLower()) trước khi tìm kiếm nó. 
- Phương thức LastIndexOf dùng cho việc xác định vị trí cuối cùng của mẫu ký tự đó trong chuỗi. 
Trích xuất chuỗi…
Ví dụ
// Phương thức đếm sự xuất hiện của chuỗi con trong chuỗi cho trước
public static int CharCount(String strSource,String strToFind){   
int iCount=0;  // string type has index of 0   
int iPos=strSource.IndexOf(strToFind);  
while(iPos!=-1)   {
     iCount++;      
     iPos=strSource.IndexOf(strToFind, iPos+1);
}   
return iCount;
}
public class MyApp{   
static void Main()        {
     string txt = "In Xanadu did Kubla Khan";      
     int ct = CharCount(txt, "a"); // ct = 4   
}
So sánh các chuỗi
Bốn phương thức: 
Compare, CompareOrdinal, CompareTo, và Equals.
 Ví dụ:
bool isMatch;string title = "Ancient Mariner";
isMatch = (title           == "ANCIENT MARINER");    // false
isMatch = (title.ToUpper() == "ANCIENT MARINER");    // true
isMatch = (title           == "Ancient"+" Mariner"); // true
isMatch =  title.Equals("Ancient Mariner");          // true
Chú ý rằng toán tử == tuy chỉ là một cách viết đại diện cho phương thức Equals nhưng nó thật sự nhanh hơn so với việc gọi trực tiếp Equals(). 
7. Biến và Hằng:
Biến
Khái niệm: Một biến dùng để lưu trữ giá trị mang một kiểu dữ liệu nào đó. 
Cú pháp C# sau đây để khai báo một biến :
[modifier] datatype identifier ;
Với modifier là một trong những từ khoá : public, private, protected, 
Với datatype là  kiểu dữ liệu (int , long , float. . . ) 
identifier là tên biến. 
Ví dụ khai báo biến i như sau:
  public int i;
Ta có thể gán cho biến một giá trị bằng toán tử "=".
      i = 10 ;
Ta cũng có thể khai báo biến và khởi tạo cho biến một giá trị như sau :
      int i = 10 ;
Nếu ta khai báo nhiều biến có cùng kiểu dữ liệu sẽ có dạng như sau:
      int x = 10, y = 20;  
Phạm vi hoạt động của biến
Phạm vi hoạt động của biến là vùng đoạn mã mà từ đấy biến có thể được truy xuất.
Trong một phạm vi hoạt động (scope), không thể có hai biến cùng mang một tên giống nhau. 
     Trong ví dụ dưới đây ta không thể làm như sau :
int x = 20;
// một số câu lệnh ở đây
int x = 30;
Ví dụ về biến được khai báo trong các phạm vi sử dụng khác nhau
for (int i = 0; i < 10; i++)
          {
                Console.WriteLine(i);
          }  // biến i ra khỏi phạm vi 
          // Chúng ta có thể khai báo thêm biến i ở đây
          for (int i = 9; i >= 0; i--)
          {
                Console.WriteLine(i);
          }  // biến i ra khỏi phạm vi ở đây
Ví dụ về biến được khai báo trong cùng phạm vi sử dụng gây ra lỗi
int  j = 20;
for (int i = 0; i < 10; i++)
          {
                int  j = 30; // không thực thi câu lệnh vì j vẫn  
//còn trong phạm vi khai báo 
              Console.WriteLine(i + j);
          }
Hằng
Một hằng (constant) là một biến nhưng giá trị không thể thay đổi được suốt thời gian thi hành chương trình. Đôi lúc ta cũng cần có những giá trị bao giờ cũng bất biến.
Ví dụ:    
const int a = 100;   // giá trị này không thể bị thay đổi 
Hằng có những đặc điểm sau :
Hằng bắt buộc phải được gán giá trị lúc khai báo. Một khi đã được khởi gán thì không thể viết chồng lên.
Trị của hằng phải có thể được tính toán vào lúc biên dịch nên không thể gán một hằng từ giá trị của một biến. Nếu muốn làm thế thì phải sử dụng đến một read-only field*.
Hằng bao giờ cũng static, tuy nhiên ta không thể đưa từ khoá static vào khi khai báo hằng. 
Thuận lợi khi sử dụng hằng trong chương trình:
Hằng làm cho chương trình đọc dễ dàng hơn, bằng cách thay thế những con số vô cảm bởi những tên mang đầy ý nghĩa hơn.
Hằng làm cho dễ sửa chương trình hơn.
Hằng làm cho việc tránh lỗi dễ dàng hơn, nếu bạn gán một trị khác cho một hằng đâu đó trong chương trình sau khi bạn đã gán giá trị cho hằng, thì trình biên dịch sẽ thông báo sai lầm.
Định danh: tên mà người lập trình chỉ định cho các kiểu dữ liệu, các phương thức, biến, hằng, hay đối tượng.... 
Một định danh phải bắt đầu với một ký tự chữ cái hay dấu gạch dưới, các ký tự còn lại phải là ký tự chữ cái, chữ số, dấu gạch dưới.
Các định danh không được trùng với các từ khoá mà C# đưa ra.
C# phân biệt các ký tự thường và ký tự hoa nên C# xem hai biến bienNguyen và biennguyen là hoàn toàn khác nhau.
8. Biểu thức và các phép toán:
- Biểu thức
- Toán tử
Toán tử gán
Toán tử toán học
Toán tử tăng giảm
Toán tử quan hệ
Toán tử logic
- Độ ưu tiên toán tử
- tử ba ngôi
- Những câu lệnh thực hiện việc đánh giá một giá trị gọi là biểu thức. 
- Một phép gán một giá trị cho một biến cũng là một biểu thức.
Ví dụ phép gán sau:
  var1 = 24;
var1 = var2 = 24;
a = b = c = d = e = 1;
- Toán tử được kí hiệu bằng một biểu tượng dùng để thực hiện một hành động. 
- Các kiểu toán tử cơ bản:
Toán tử gán
Toán tử toán học
Toán tử quan hệ
Toán tử logic
Toán tử gán
- Toán tử gán hay phép gán làm cho toán hạng bên trái thay đổi giá trị bằng với giá trị của toán hạng bên phải.
- Toán tử gán là toán tử hai ngôi. 
- Là toán tử đơn giản,thông dụng nhất và cũng dễ sử dụng nhất.
Ví dụ phép gán: var1 = 10;
- Gồm có năm toán tử: +, - , * , / , %
Phép / cũng chính là phép chia lấy nguyên nếu số chia và số bị chia kiểu số nguyên, trả về số thực nếu một trong hai là kiểu thực.
Phép chia lấy dư % trả về số dư khi thực hiện phép chia.
Toán tử tăng giảm
- Dùng để thay đổi chính giá trị của biến được dùng khi thực hiện phép toán với một giá trị.
toantutanggiam.jpg
- Toán tử tăng giảm tiền tố và hậu tố
Giả sử muốn kết hợp các phép toán như gia tăng giá trị của một biến và gán giá trị của biến cho biến thứ hai, ta viết:
var1 = var2++;
Câu hỏi được đặt ra là gán giá trị trước khi cộng hay gán giá trị sau khi đã cộng? 
C# cung cấp thứ tự thực hiện phép toán tăng giảm với phép toán gán gọi là tiền tố và hậu tố.
Tiền tố: 
var2 = var1++;
Hậu tố:
var2 = ++var1; 

Nguồn bài viết: Dngaz.com

BÌNH LUẬN BÀI VIẾT

Bài viết mới nhất

LIKE BOX

Bài viết được xem nhiều nhất

HỌC HTML