Thứ Ba, 25 tháng 12, 2007

Lập trình C#

if-else statement
Câu lệnh if lựa chọn một câu lệnh để thực hiện dựa trên giá trị của biểu thức có kiểu Boolean.

Cấu trúc:

if (expression) statement1 [else statement2]

Trong đó expression : biểu thức trả về giá trị theo kiểu boole (đúng, sai) hoặc là một kiểu chứa đựng toán tử là true và false

statement1 : những dòng lệnh được thực hiện nếu biểu thức đúng

statement2 : những dòng lệnh được thực hiện nếu biểu thức là sai

Ví dụ 1:

if (x > 10) if (y > 20) Console.Write("Statement_1"); else Console.Write("Statement_2");

Ví dụ 2

if (x > 10) { if (y > 20) Console.Write("Statement_1"); } else Console.Write("Statement_2");

C# Switch Statement
C trúc điều khiển Switch. Là một cấu trúc điều khiển chương trình lựa chọn nhiều điều khiện bằng cách gán giá trị cho nhưng điều kiện case bên trong thân của nó.

Cấu trúc:

switch (expression) { case constant-expression: statement jump-statement [default: statement jump-statement] }

Trong đó:

expression: một số nguyên hoặc chuỗi biểu thức

statement: là những câu lệnh đi kèm để thực hiện nếu điều khiển được chuyển đến case hoặc default.

jump-statement: chuyển điều khiển chương trình ra ngoài thân vòng lạp

caseconstant-expression: điều khiển được chuyển đến một điều kiện case tùy theo giá trị của nó

Ví dụ:

using System; class SwitchTest { public static void Main() { Console.WriteLine("Coffee sizes: 1=Small 2=Medium 3=Large"); Console.Write("Please enter your selection: "); string s = Console.ReadLine(); int n = int.Parse(s); int cost = 0; switch(n) { case 1: cost += 25; break; case 2: cost += 25; goto case 1; case 3: cost += 50; goto case 1; default: Console.WriteLine("Invalid selection. Please select 1, 2, or 3."); break; } if (cost != 0) Console.WriteLine("Please insert {0} cents.", cost); Console.WriteLine("Thank you for your business."); } }

C# For statement - Vòng lặp For
Vòng lặp For thực hiện một câu lệnh hoặc nhóm những câu lệnh một cách lập lại đến khi biểu thức điều kiện trả về giá trị sai (false).

Cấu trúc

for ([initializers]; [expression]; [iterators]) statement

initializers: khởi động bộ đếm (số lần lặp).

expression: biểu thức điều khiện có giá trị theo kiểu boolean.

iterators: câu lệnh gia tăng hoặc giảm số lần lặp

statement: những câu lệnh được thực thi

Ví dụ

using System; public class ForLoopTest { public static void Main() { for (int i = 1; i <= 5; i++) Console.WriteLine(i); } }

Giá trị trả về:

1 2 3 4 5

While statement - Câu lệnh while
Câu lệnh white thực hiện một câu lệnh hoặc một nhóm những câu lệnh đến khi biểu thức điều kiện trả về giá trị false.

Cấu trúc

while (expression) statement

trong đó

expression
Một biểu thức có giá trị trả về là bool, dùng để kiểm tra điều kiện lặp.
statement
Những câu lệnh được thực thi

(*) Chú ý: dùng biểu thức điều kiện lặp để số lần lặp là hữa hạn, tránh trường hợp lọc vô hạn.

Ví dụ:

using System;
class WhileTest
{
  public static void Main()
  {
     int n = 1;

     while (n < 6)
     {
        Console.WriteLine("Current value of n is {0}", n);
        n++;
     }
  }
}

Trả về

Current value of n is 1
Current value of n is 2
Current value of n is 3
Current value of n is 4
Current value of n is 5
Do...white statement - Vòng lặp do...while
Câu lệnh đo thực thi một câu lệnh hay nhóm câu lệnh một cách lặp lại đến khi biểu thức điều kiện lặp trả về false.
Cấu trúc
do statement while (expression);

trong đó

expression
Một biểu thực trả về giá trị có kiểu boolean (đúng, sai), biểu thức này kiểm tra điều kiện lặp
statement
Câu lệnh để được thực thi.

Chú ý

Không giống như câu lệnh while, thân của vòng lặp do được thực hiện ít nhất một lần.

Ví dụ:

using System;
public class TestDoWhile
{
  public static void Main ()
  {
     int x;
     int y = 0;

     do
     {
        x = y++;
        Console.WriteLine(x);
     }

     while(y < 5);
  }  
}

Trả về

0
1
2
3
4

Ví dụ:

Chú ý trong ví dụ này, mặc dầu điều kiện lặp trả về false, nhưng vòng lập cũng được thực hiện một lần.

using System;
class DoTest {
  public static void Main()
  {
     int n = 10;
     do
     {
        Console.WriteLine("Current value of n is {0}", n);
        n++;
     } while (n < 6);
  }
}
Current value of n is 10
Variables - Biến trong C#
Biến biểu trưng cho những vùng bộ nhớ, Mỗi biến được đặt bởi một kiểu dữ liệu để lưu trữ dữ liệu tương ứng.

Một biến phải được khai báo trước khi nó có thể chứa dữ liệu.

Các loại biến

C# định nghĩa có 7 kiểu biến, bao gồm: static variables, instance variables, array elements, value parameters, reference parameters, output parameters, and 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 số truyền theo địa chỉ(reference parameter), c là một tham số output, và i là một biến cục bộ.

Hiện thực khái niệm hướng đối tượng (OOP) trong C#
Bài này sẽ giúp bạn hiểu về cách thực thi OOP trong C#, ở phần 1, các bạn sẽ được tiếp cận định nghĩa khái niệm Lớp, Hàm tạo, hàm hủy.

Những nội dung trong phần này tổng kết hóa những điểm quan trọng nhất về khái niệm OOP trong C#. Nội dung bao gồm

  • Định nghĩa lớp, đối tượng
  • Hàm tạo (Constructor), hàm hủy (Destructor)
  • Function Overloading.
  • Thừa kế trong lập trình C#.
  • Overriding Method.
  • Polymorphism
  • Abstract Class trong C#
  • Namespaces
  • Enumerators

Lớp (class) trong C#

Class

Một 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 đó. Do đó 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

{

// thân class

}

Đối tượng (Objects)

Đối tượng 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.

Ưu điểm của việc sử dụng Class và Đối tượng

Có một số những ưu điểm của việc sử dụng Class và đối tượng trong phát triển phần mềm. Những ưu điểm nổi bật nhất được liệt kê như sau:

  • Duy trì code bằng việc mô hình hóa
  • Đóng gói những sự phức tạp trong mã lênh từ người dùng
  • Khả năng sử dụng lại
  • Cung cấp đơn kế thừa để thực thi nhiều phương thức.

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

Constructors

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ị.

Ví dụ

class Library

{

private int ibooktypes;

//Constructor

public Library()

{

ibooktypes = 7;

}

public Library(int value)

{

ibooktypes = value;

}

}

Destructors

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 “~”.

Ví dụ

class Library

{

private int ibooktypes;

//Constructor

public Library()

{

ibooktypes = 7;

}

public Library(int value)

{

ibooktypes = value;

}

~ Library()

{

//thực thi câu lệnh

}

}

Phần 2: Function Overloading

Method Overloading xuất hiện khi trong một class có từ hai hàm có cùng tên. Có hai kiểu Method Overloading:

  • Function Overloading dựa trên số lượng tham số truyền vào
  • Function Overloading dựa trên kiểu giá trị tham số truyền vào.

Ví dụ

class Library

{

// Function Overloading

public void insertbooks(int id)

{

//

}

public void insertbooks(int id, int type)

{

//

}

public void insertbooks(string id, int type)

{

//

}

}

Ba hàm insertbooks ở trên là một ví dụ về function overloading trong lập trình C#. Trong khi hàm thứ nhất và thứ 2 là overloading theo số lượng tham số, và hàm thứ 3 với hàm thứ 2 là overloading theo kiểu tham số truyền vào.

Phần 3 : Thừa kế
Một trong những ưu điểm nổi bật của lập trình hướng đối tượng đó là thừa kế, đó là sự sử dụng lại những thuộc tính và hành vi của một lớp. Có hai kiểu kế thừa trong lập trình, đơn kế thừa và đa kế thừa.

Một trong những ưu điểm nổi bật của lập trình hướng đối tượng đó là thừa kế, đó là sự sử dụng lại những thuộc tính và hành vi của một lớp. Có hai kiểu kế thừa trong lập trình, đơn kế thừa và đa kế thừa.

C# cung cấp mô hình đơn kế thừa.

Ví dụ về kế thừa trong C#.

/* Ví dụ về thừa kế trong lậ trình C# */

using System;

using System.Collections.Generic;

using System.Text;

namespace __OOP_Inheritance

{

class Program

{

static void Main(string[] args)

{

Dog objDog = new Dog(4);

objDog.displayProperties();

Chicken objChicken = new Chicken(2);

objChicken.displayProperties();

Console.Read();

}

}

class Animal

{

protected int ifoots;

protected string sName;

protected void setFoot(int ival)

{

ifoots = ival;

}

protected void setName(string sVal)

{

sName = sVal;

}

public void displayProperties()

{

Console.WriteLine(sName + " have " + ifoots.ToString()+ " foots");

}

}

class Dog : Animal

{

public Dog(int ival)

{

setName("Dog");

ifoots = ival;

}

}

class Chicken : Animal

{

public Chicken(int ival)

{

setName("Chicken");

setFoot(ival);

}

}

}

Ở ví dụ trên, Dog và Chicken là hai lớp kế thừa từ lớp Animal, do đó các thuộc tính như số chân, ifoots và tên sName đương nhiên xuất hiện trong hai lớp này và cho phép sử dụng. Tương tự, các hàm như setName(), setFoot(), displayProperties() tại lớp Animal cũng được kế thừa xuống hai lớp Dog và Chicken. Do đó ta có thể gọi những hàm này, và kết quả hiển thị khi gọi hàm displayProperties() theo đối tượng objDog và objChicken là khác nhau.

phần 4 : tính đa hình - Polymorphism
Tính đa hình hay polymorphism là một trong những nét tạo nên đặc điểm nổi bật của OOP, bài viết này là một ví dụ về tính đa hình rõ nhất trong lập trình OOP với C#

Xét ví dụ sau đây: using System;

using System.Collections.Generic;

using System.Text;

namespace __OOP_polymorphism

{

class Program

{

static void Main(string[] args)

{

Child objchild = new Child();

Console.WriteLine("Result is " + objchild.methodA().ToString());

Console.Read();

}

}

class Parent

{

public int methodA()

{

return methodB() * methodC();

}

public virtual int methodB()

{

return 1;

}

public int methodC()

{

return 2;

}

}

class Child : Parent

{

public override int methodB()

{

return 3;

}

}

}

Kết quả chạy trương trình

6

Như bình thường của mô hình kế thừa, kết quả trả về khi gọi hàm methodA() từ đối tượng của lớp Child phải là “Result is 2”. Nhưng trong kết quả trên, kết quả là “Result is 6”. Kết quả này do hàm methodB() tại lớp Child đã override hàm methodB() tại lớp Parent.

Vậy ta có thể khái quá Polymorphism như sau:

  • Polymorphism không chỉ đơn giản là overriding, mà nó là overrding thông minh.
  • Khác biệt giữ Overriding và Polymorphism đó là trong Polymorphism, sự quyết định gọi hàm được thực hiện khi chương trình chạy.

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