ThienThanCNTT
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

Lập trình trên C# - những lời nói đầu

Go down

Lập trình trên C# - những lời nói đầu Empty Lập trình trên C# - những lời nói đầu

Bài gửi by nth 24/08/09, 05:46 pm

Lập trình trên C# - những lời nói đầu

Lập trình không là một công việc, nó là một thú vui và là một niềm đam mê. Bạn sẽ phải làm quen với các dòng chữ loằng ngoằng như là int, public, system để hiện lên trên màn hình máy tính một thế giới mô phỏng hoàn hảo hoặc là một ứng dụng tiện lợi được thực hiện bằng cách cử động đầu ngón tay.
Có rất nhiều công cụ giúp chúng ta thực hiện điều đó được gọi là các ngôn ngữ lập trình. Đã có rất nhiều các ngôn ngữ lập trình được sinh ra theo nhu cầu và yêu cầu của thực tế. Và bạn có thể chọn bất kì theo sở thích và thiên hướng của bạn.
Nhưng thực tế, ngôn ngữ lập trình chỉ là cái để chúng ta có thể sai bảo được cái pc, khiến nó hiểu và thực hiện những điều chúng ta chờ đợi. Kết quả đó phụ thuộc vào cấu trúc ngôn ngữ, vào nền tảng ngôn ngữ, vào những hộ trợ và đặc tính của ngôn ngữ; một phần quan trọng đó là thuật toán - tư duy logic và trừu tượng của người lập trình.
C# mang lại cho chúng ta tất cả những điều đó. Nó được thiết kế cho một nền tảng mạnh - một công nghệ hàng đầu là .NET, nó có được sự mạnh mẽ và thống nhất trong đặc tính hướng đối tượng của mình, nó có được sự mềm dẻo và thân thiện với những từ khóa dành riêng rất thân thuộc với ngôn ngữ tự nhiên, nó có những kiểu dữ liệu và những cấu trúc lệnh căn bản nhất để bạn áp dụng nhữn thuật toán cần thiết cho công việc của bạn. Quan trọng nhất, rất nhiều ứng dụng đã được phát triển từ C#, điều đó có nghĩa là nếu bạn đi theo C#, bạn sẽ có tương lai vì đã có rất nhiều người đạt được tương lai từ nó.
Chào mừng đến với thế giới C#.


Nortonxe(UDS)



Nếu Bạn bắt đầu chọn một ngôn ngữ cho bản thân mình . Bạn đang lưỡng lự giữa java và C# , hoặc có thể bạn muốn một ngôn ngữ bác học hơn như VC++. C# là một ngôn ngữ tuyệt vời cho bạn lựa chọn .
Vì sao :
1. C# là một ngôn ngữ đơn giản
2. C# là một ngôn ngữ hiện đại
3. C# là một ngôn ngữ hướng đối tượng
4. C# là mạnh mẽ , ít từ khóa . Và trên hết C# là một ngôn ngữ phổ biến
nth
nth
Admin
Admin

Tổng số bài gửi : 550
Số điểm : 1113
Số lần được cám ơn : 33
Ngày đến diễn đàn: : 01/08/2009
Tuổi : 35
Đến từ : Thiên Đường

https://thuhuong.forumvi.net

Về Đầu Trang Go down

Lập trình trên C# - những lời nói đầu Empty Re: Lập trình trên C# - những lời nói đầu

Bài gửi by nth 26/08/09, 02:57 pm

Phân biệt giữa truyền tham chiếu (ref) và truyền tham chiếu với biến chưa khởi tạo (out)
+ Đầu tiên là công dụng của hai biến này đã :
công dụng của chúng là lấy giá trị của tham chiếu truyền vào các phương
thức (hàm) sau khi đã được các phương thức xử lý. Nghe có vẻ hơi mờ hồ
nhỉ ! tại cũng chẳng biết diễn đạt sao nữa. Thồi thì cứ coi ví dụ rồi
hẵng tính nha ^.^
Đây là hàm :
Code:
public void CongSo(int a,int b)
{
a = a+1;
b = b+2;
}

Đây là truyền giá trị cho ham:
Code:
int a1 = 2;
int b1 = 4;
CongSo(a1,b1)

Hàm này chẳng trả về điều gì cả (nếu có trả về điều gì đó thì
cũng kệ ha ^.^). Giờ ta sẽ có một vấn đề là : “ta muốn lấy giá trị của
biến a và biến b sau khi ham CongSo đã thực hiển việc cộng a cho 1 và
cộng b cho 2”
câu trả lời là dùng ref hoặc out.
+ Cách dùng :
để sử dụng ref hoặc out để lấy giá trị của tham chiếu ta dùng như sau:
Về ham:
Code:
public  void CongSo(ref int a, ref int b)
//public void CongSo(out int a,out int b)

Và :
Code:
CongSo(ref a1, ref b1)
//CongSo(out a1,out b1)

Giờ ta có thể lấy giá trị của biến a1 và biến b1 một cách dễ dàng như các biến bình thường khác rồi.
Code:
Console.WriteLine("Gia Tri Da Su Ly : {0}:{1}:{2}",a1,b1)

+ Giờ ta sẽ đi tới những điểm khác nhau của hai thằng này: theo
sách vở bảo thì out là phần mở rộng của ref những mình chẳng thấy như
vậy, theo mình thì out là bổ xung thêm tính năng cho ref ở một số
trường hợp nhất định (mà mình mới biết có một thôi. Hi vọng pro góp ý)
- Giờ coi nó khác nhau ở đâu nha.
ref có thể thực hiện các phép tính với chính những tham chiếu mà nó
truyền vô trong khi out làm như vậy sẽ bị báo lỗi. Như ví dụ sau :
Code:
public void CongSo(out int a,out int b)
{
a = a+a;
b = b+a;
}

Sẽ xuất hiện lỗi
Use of unassignes out parameter ‘a’
Use of unassignes out parameter ‘b’
Dịch thì mình chịu nha. Vì anh văn của mình chỉ bằng con số 0 mà thôi.
Hic (biết là đã theo it thì điều đó là ko được nhưng nuốt không có nổi.)
- giờ ta sẽ bỏ hai dòng gán giá trị cho biến a1, và b1 đi
Code:
int a1;
int b1;

và sử dụng thằng ref thì sẽ bị báo lỗi là :
Use of unassignes local parameter ‘a1’
Use of unassignes local parameter ‘b1’
Nhưng với out thì lại hoàn toàn OK. Vậy ta có thể nói là với ref thì
biến truyền vào luôn phải có giá trị, trong khi với out thì không cần.
Vậy là hết những gì mình biết về hai thằng này rồi. Có gì mọi người bổ sung thêm nha.
À. Còn một điều nữa là ta có thể kết hợp cả hai thằng này cũng được nha.
Ví dụ như thế này :
Code:
CongSo(int h, out int m,ref int s)

Còn đây là code áp dụng thằng này để mọi người vọc nha (theo code
của cuốn “Ngôn Ngữ Lập Trình C#” co chỉnh lại) chạy trên Cosole nha :

using System;
public class ThoiGian
{
private int Y, M, D, H, Mi, S;
public void thoigian()
{
Console.WriteLine("Thoi Gian Hien Tai :
{0}/{1}/{2}/ {3}:{4}:{5}", D, M, Y, H, Mi, S);
}

//public void GetTime(ref int h, ref int m,ref int s)
public void GhetTime(out int h, out int m, out int s)
{
h = H;//h = H + h;
m = Mi;//m = Mi + m;
s = S;// s = S + s;
}
public ThoiGian(DateTime dt)
{
Y = dt.Year;
M = dt.Month;
D = dt.Day;
H = dt.Hour;
Mi = dt.Minute;
S = dt.Second;
}
}
public class ThucThi
{
static void Main()
{
DateTime thoi = DateTime.Now;
ThoiGian t = new ThoiGian(thoi);
t.thoigian();
int theH = 1;//int theH;
int theM = 1;//int theM;
int theS = 1;//int theS;
[You must be registered and logged in to see this link.] theH,ref theM,ref theS);
t.GhetTime(out theH, out theM, out theS);
Console.WriteLine("Thoi Gian Duoc Chinh Lai :
{0}:{1}:{2}", theH, theM, theS);

}
}





Được sửa bởi nth ngày 27/08/09, 05:39 pm; sửa lần 5.
nth
nth
Admin
Admin

Tổng số bài gửi : 550
Số điểm : 1113
Số lần được cám ơn : 33
Ngày đến diễn đàn: : 01/08/2009
Tuổi : 35
Đến từ : Thiên Đường

https://thuhuong.forumvi.net

Về Đầu Trang Go down

Lập trình trên C# - những lời nói đầu Empty Re: Lập trình trên C# - những lời nói đầu

Bài gửi by nth 26/08/09, 03:03 pm

Từ khóa out ở đây C# muốn chỉ rằng biến đưa vào sẽ là kết quả đầu ra
sau khi gọi hàm. Và hàm sẽ không quan tâm tới đầu vào nó là gì, chỉ cần
biết là tính toán và trả giá tri ra biến out đó. vd void sum(int a, int
b, out s). Vì thế mà C# sẽ coi nó là chưa gán giá tri và không có lý do
gì để sử dụng nó để tính toán lần đầu cả (s = s + a)

Còn từ khóa ref mở rộng hơn out, vừa là dữ liệu vào (input) và cũng vừa
là kết quả ra (output). vd swap(ref int a, ref int b). Đã là dữ liệu
đầu vào thì tất nhiên trước khi đưa vào nó phải có giá trị, và tất
nhiên nó phải được gán trước đã.

Ref và out nói riêng và C# nói chung còn mang tính cấu trúc ở C++.

Use of unassignes local parameter ‘a1’: có nghĩa là bạn đã sử dụng biến chưa được gán giá trị.

Nên có thói quen khởi tạo giá trị biến ngay lúc khai báo nhé int a = 0;,
hoặc gán giá trị trong constructor. Điều này tránh lỗi khi lập trình.
Mình đã bị lỗi này khi làm với C++ , chạy debug thì ok nhưng chạy
release lỗi không hiểu vì sao, mất cả buổi để phát hiện. Sad

Còn đối với object (class).
class clsA
{
private int x;
clsA(int newx) { x = newx; } // constructor
void Setx(int newx) { x = newx; } // change value x.
string ToString() { return x.ToString(); } // print clsA.
}

void method0(clsA a) //tương đương clsA* a bên C++
{
a.Setx(19);
}

void method1(clsA a) //tương đương clsA* a bên C++
{
clsA a2(5);
a = a2;
}

void method2(ref clsA a) //tương đương clsA*& a bên C++
{
clsA a2(5);
a = a2;
}

void main()
{
clsA a1(0);
Console.WriteLine(a1); // ra 0

method0(a1);
Console.WriteLine(a1); // ra 19

method1(a1);
Console.WriteLine(a1); // ra 19

method2(ref a1);
Console.WriteLine(a1); // ra 5
}
nth
nth
Admin
Admin

Tổng số bài gửi : 550
Số điểm : 1113
Số lần được cám ơn : 33
Ngày đến diễn đàn: : 01/08/2009
Tuổi : 35
Đến từ : Thiên Đường

https://thuhuong.forumvi.net

Về Đầu Trang Go down

Lập trình trên C# - những lời nói đầu Empty Re: Lập trình trên C# - những lời nói đầu

Bài gửi by nth 26/08/09, 03:09 pm

Dùng ref thì biến đó bắt buộc phải đc khởi tạo, còn dùng out thì không cần.
Để hiểu chi tiết ref và out có tác dụng như thế nào: các bạn tải 2 video này về xem (tốn phí đó):
[You must be registered and logged in to see this link.]

Đúng như bạn nói, cả ref và out đều là cách truyền tham chiếu (passed
by reference) nhưng chúng khác nhau về ngữ cảnh. Giả sử khai báo 1 biến
a, sau đó khởi tạo 1 gt cho biến =1 .
Khi truyền vào 1 hàm bằng ref param, tức là hàm plusOne() đó sử dụng
param tham chiếu của biến a và giá trị của param chính là giá trị của
biến a = 1. kết thúc hàm ta sẽ có a = 2
Còn nếu truyền vào hàm bằng out param, lúc này biến a is nothing, hàm
sẽ phải khởi tạo lại gt cho a, và phụ thuộc vào giá trị khởi tạo đó để
tiếp tục xử lý để đưa ra kết quả cuối cho a.
Các trường hợp sử dụng 2 loại này rất khác nhau. Sử dụng ref khi giá
trị của biến trước đó có ý nghĩa với hàm, còn sử dụng out khi giá trị
của biến trước đó không có ý nghĩa gì với hàm.
nth
nth
Admin
Admin

Tổng số bài gửi : 550
Số điểm : 1113
Số lần được cám ơn : 33
Ngày đến diễn đàn: : 01/08/2009
Tuổi : 35
Đến từ : Thiên Đường

https://thuhuong.forumvi.net

Về Đầu Trang Go down

Lập trình trên C# - những lời nói đầu Empty Re: Lập trình trên C# - những lời nói đầu

Bài gửi by Sponsored content


Sponsored content


Về Đầu Trang Go down

Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết