Thứ Hai, 11 tháng 2, 2008

Cơ bản C#

Tổng quan :
Trong chương này chúng tôi sẽ cung cấp cho bạn những kiến thức cơ bản nhất của ngôn ngữ lập trình C#. Những chủ đề chính chúng ta sẽ được học sau đây :

    *  Khai báo biến
    *  Khởi tạo và phạm vi hoạt động của biến
    *  C#'s predefined data types
    *  Cách sử dụng các vòng lặp và câu lệnh.
    *  Gọi và hiển thị lớp và phương thức
    *  Cách sử dụng mảng
    *  Toán tử
    *  An toàn kiểu và cách để chuyển các kiểu dữ liệu
    *  Enumerations
    *  Namespaces
    *  Phương thức của hàm Main( )
    *  Cơ bản trình biên dịch dòng lệnh trong C#
    *  Using System.Console để thực hiện I/O
    *  Sử dụng chú thích trong C# và  Visual Studio . NET
    *  Các định danh và từ khoá trong C#

Cuối chương này bạn sẽ có đủ khả năng viết một chương trình đơn giản bằng C# mà bạn không cần phải biết sự kế thừa hay hướng đối tượng mà chúng tôi sẽ trình bày những phần này ở vài chương tới của quyển sách.

Before we start
Như chúng tôi đã đề cập C# là ngôn ngữ lập trình hướng đối tượng do đó chúng ta phải nắm vững thế nào là class, objects, interface và inheritance. Nếu trước đây bạn đã lập trình C++ hay Java thì bạn nên nắm vững nền của lập trình hướng đối tượng. (OOP)

Nếu bạn chưa học qua lập trình hướng đối tượng thì cuốn sách này sẽ giúp bạn học nó, phụ lục A có cung cấp cho bạn những hướng dẫn trong lập trình OOP.

Nếu bạn là người đã có kinh nghiệm trong VB 6, C++, hoặc  Java bạn nên lưu ý  sự so sánh sự khác nhau của chúng tôi về C# và C++, Java, VB 6 chúng  ta sẽ có cái nhìn rõ hơn trong việc học C#.

Chương trình đầu tiên !

Chúng ta sẽ bắt đầu theo cách truyền thống là tạo một chương trình viết bằng C# rồi cho biên dịch và chạy thử nghiệm. Việc phân tích chương trình con này sẽ dẫn dắt bạn vào những chức năng chủ chốt của ngôn ngữ C#. Bạn có thể biên dịch chương trình này bằng cách khỏ vào chương trình soạn thảo văn bản đơn giản, Notepad chẳng hạn, rồi cho cất trữ dưới dạng tập tin với tên mở rộng là .cs (tắt chữ C sharp), rồi cho chạy trình biên dịch C# command_line (scs.exe) 
ví dụ tập tin First.cs :

using System;
namespace Wrox.ProCSharp.Basics
{
   class MyFirstCSharpClass
   {
      static void Main()
      {
         Console.WriteLine("This isn't at all like Java!");
         Console.ReadLine();
         return;
      }
   }
}

Một chương trình khả thi mang tên First.exe sẽ được tạo ra, và bạn có thể cho chạy chương trình này từ command line giống như với DOS hoặc từ Windows Explorer như bất cứ chương trình khả thi nào.Chạy chương trình như sau :
csc First.cs
Microsoft (R) Visual C# .NET Compiler version 7.00.9466
for Microsoft (R) .NET Framework version 1.0.3705
Copyright (C) Microsoft Corporation 2001. All rights reserved.
First
This isn't at all like Java!

Biến và Hằng
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 identifer ; 
Với modifier là một trong những từ khoá : public, private, protected, . . . còn datatype là  kiểu dữ liệu (int , long , float. . . ) và identifier là tên biến.

Thí dụ dưới đây một biến mang tên i kiểu số nguyên int và có thể được truy cập bởi bất cứ hàm nào.
thí dụ :
     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;
      int  x = 10;
      bool y = true ;    //  khai báo trên đúng 
      int x = 10 , bool = true  // khai báo trên có lỗi

Phạm vi hoạt động của biến (Variable Scope).
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 trùng nhau. Thí dụ ta không thể làm như sau :

int x = 20;
// một số câu lệnh ở đây
int x = 30;

Xét ví dụ sau :

using System;
namespace Wrox.ProCSharp.Basics
{
   public class ScopeTest
   {
      public static int Main()
      {
         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
         return 0;
      }
   }
}

Đoạn mã trên đơn giản in ra các số từ 0 đến 9, rồi lộn ngược lại từ 9 đến 0, sử dụng vòng lặp for.Chúng ta sẽ đề cập loại vòng lặp này. Điều quan trọng là ở đây chúng ta khai báo biến i hai lần trong cùng một hàm ScopeTest.Chúng ta có thể làm được điều này vì i được khai báo trong vòng lặp nghĩa là biến i cục bộ đối với vòng lặp.Một khi vòng lặp hoàn thành nhiệm vụ thì biến thoát khỏi phạm vi, và không thể truy xuất được nữa.

Chúng ta xem tiếp một ví dụ khác :

      public static int Main()
      {
         int j = 20;
         for (int i = 0; i < 10; i++)
         {
            int j = 30;   // không thể thực thi  - j vẫn còn trong phạm vi
            Console.WriteLine(j + i);
         }
         return 0;
      } 

Đoạn mã trên sẽ được biên dịch mặc dù có hai biến đặc tên j trong phạm vi không có phương thức hàm main( ) biến j được định nghĩa ở lớp mức và không đi ra ngoài đến khi lớp bị huỷ ( trong trường hợp này chương trình kết thúc khi hàm main( ) kết thúc), biến j được định nghĩa trong hàm main( ) phương thức ẩn trong lớp mức với biến cùng tên j nên khi chạy chương trình sẽ hiện giá trị 30. 

Ta xem đoạn thí dụ sau :

using System;
namespace Wrox.ProCSharp.Basics
{
   class ScopeTest2
   {
      static int j = 20;

      public static void Main()
      {
         int j = 30;
         Console.WriteLine(j);
         return;
      }
   }
}

HẰNG :
Một hằng (constant) là một biến nhưng 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.

Thí dụ
const int a = 100;   // giá trị này không thể bị thay đổi
Trong định nghĩa lớp mà ta sẽ xem sau, người ta thường định nghĩa những mục tin (field) được gọi là read-only variable, nghĩa là những biến chỉ được đọc mà thô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, Do đó không thể gán một hằng từ một 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. Có ba thuận lợi khi sử dụng hằng trong chương trình của bạn :
  • 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.

DangTrung

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

Đăng nhận xét