Top posting users this week

Top posting users this month

Latest topics
» Lợi ích của việc khám sức khỏe định kỳ đối với người lao động và doanh nghiệp.
by trangtpbusiness Sat 30 Jul 2016, 11:47 am

» Bán buôn thực phẩm sạch, thực phẩm an toàn cho các đại lý tại Hà Nội
by trangtpbusiness Sat 30 Jul 2016, 11:40 am

» Khám bệnh nghề nghiệp và lập hồ sơ vệ sinh lao động ở đâu uy tín
by trangtpbusiness Sat 23 Jul 2016, 11:28 am

» Cung cấp thực phẩm sạch cho đại lý tại Hà Nội
by trangtpbusiness Sat 23 Jul 2016, 11:20 am

» Khám sức khỏe định kỳ để phát hiện sớm bệnh nguy hiểm
by trangtpbusiness Tue 05 Jul 2016, 10:31 am

» Thực phẩm sạch, thực phẩm an toàn cho người Việt
by trangtpbusiness Tue 05 Jul 2016, 10:29 am

» Dịch vụ tư vấn khám sức khỏe định kỳ cho người lao động
by trangtpbusiness Wed 22 Jun 2016, 3:42 pm

» Nguồn thực phẩm sạch cho người dân thủ đô yên tâm mua sắm.
by trangtpbusiness Wed 22 Jun 2016, 3:39 pm

» Khám sức khỏe định kỳ cho người lao động tại Hà Nội
by trangtpbusiness Mon 20 Jun 2016, 11:21 am

» Cung cấp thực phẩm sạch cho các đại lý khu vực Miền bắc
by trangtpbusiness Mon 20 Jun 2016, 11:18 am

» Địa chỉ uy tín tại Hà Nội cho mọi người đi kiểm tra sức khỏe định kỳ
by trangtpbusiness Tue 14 Jun 2016, 1:45 pm

» Giới thiệu địa chỉ cung cấp thực phẩm sạch tại Hà Nội uy tín
by trangtpbusiness Tue 14 Jun 2016, 1:43 pm

» Khám sức khỏe định kỳ uy tín, chất lượng
by trangtpbusiness Mon 13 Jun 2016, 9:35 am

» Đơn vị cung cấp thực phẩm sạch cho các đại lý tại khu vực Miền Bắc
by trangtpbusiness Mon 13 Jun 2016, 9:31 am

» Mua thực phẩm sạch ở đâu Hà Nội
by trangtpbusiness Fri 10 Jun 2016, 2:36 pm

» Tư vấn khám sức khỏe định kỳ chuyên nghiệp, uy tín nhất.
by trangtpbusiness Fri 10 Jun 2016, 2:29 pm

» Dịch vụ Khám bệnh nghề nghiệp tại uy tín Hà Nội
by trangtpbusiness Thu 09 Jun 2016, 2:41 pm

» Địa chỉ mua thực phẩm sạch uy tín tại Hà Nội,
by trangtpbusiness Thu 09 Jun 2016, 2:35 pm

» Phát triển ứng dụng trên nền tảng Java cùng Stanford
by hoanghai.esoft Thu 25 Feb 2016, 10:48 am

» Xét nghiệm nguồn nước tại Hà Nội
by trangtpbusiness Wed 14 Jan 2015, 5:05 pm

» Dịch vụ xét nghiệm nước
by trangtpbusiness Sun 21 Dec 2014, 4:06 pm

Poll
Statistics
Diễn Đàn hiện có 265 thành viên
Chúng ta cùng chào mừng thành viên mới đăng ký: leuleuno4

Tổng số bài viết đã gửi vào diễn đàn là 287 in 181 subjects
4rum đã hoạt động lại rồi sao??!! @@

Fri 24 Aug 2012, 11:24 am by anan

Ô forum hoạt động lại từ bh thế này?! Tưởng là bị del r` cơ đấy! tui k nhìn đâu nha tui k nhìn đâu nha sợ lắm cưng ạ

Comments: 0

chúc mừng năm mới!!

Mon 30 Jan 2012, 8:35 am by Admin

Đừng tự hào vì nghèo mà học giỏi ______ Hãy tự hỏi học giỏi sao vẫn nghèo ..

Comments: 1

hay đấy.............! :)

Thu 10 Nov 2011, 9:13 am by anan

các biểu tượng ở mỗi chuyên mục hay đấy chứ! hi. tuyệt vời vui

Comments: 3

kariohdufbauwefd

Tue 01 Nov 2011, 5:29 pm by Admin

ốm rùi huhu khóc nè

Comments: 3

o0o_000_o0o

Fri 28 Oct 2011, 10:55 pm by Admin

chán thế tự nhiên ngồi nhìn lại chẳng thấy mình làm đc j ra hồn. thời gian ơi sao mày trôi nhanh vậy tao đã làm đc j đâu

Comments: 1

__tất_ cả__

Fri 28 Oct 2011, 11:30 am by Admin

không có j là không thể

Comments: 2

tất cả mọi người

Wed 26 Oct 2011, 9:43 pm by Admin

hjhj ta đã làm sức có thể rùi hiện tại sẽ là như thế này

Comments: 1

hihi ___hihi__hihi

Wed 26 Oct 2011, 5:19 pm by Admin

chúc các bạn ghé thăm 4rum vui vẻ nha

Comments: 0


C#- hướng đối tượng- ĐỐI TƯỢNG & LỚP PHẦN II

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down

C#- hướng đối tượng- ĐỐI TƯỢNG & LỚP PHẦN II

Bài gửi  Admin on Mon 05 Sep 2011, 9:54 am

Hàm hủy bỏ (destructor)Dùng để giải phóng vùng nhớ đã cấp phát cho đối tượng khi mà đối tuợng không còn được tham chiếu đến.

1. Hàm hủy bỏ (destructor)

Dùng để giải phóng vùng nhớ đã cấp phát cho đối tượng khi mà đối tuợng không còn được tham chiếu đến. Hàm hủy bỏ là một hàm không có giá trị trả về có tên trùng tên với class và có thêm kí tự “~”ở trước. Muốn khai báo một destructor chúng ta khai báo nó với cú pháp như sau:

class className{

public ~className()



public classname
{
public classname()
{
// code of constructor
// các công việc cần thực hiện
}
~ classname()
{
// code of descontructor
// các công việc cần thực hiện
}
}



Tuy nhiên, trong ngôn ngữ C# thì cú pháp khai báo trên là một shortcut liên kết đến một phương thức kết thúc Finalize được kết với lớp cơ sở, do vậy khi viết

~ classname()

{

// Thực hiện một số công việc
}
Và viết :
class1.Finalize()
{
// Thực hiện một số công việc
base.Finalize();
}

Thì hai cách viết như thế này sẽ được C# hiểu là như nhau.
Trong C# có một đối tượng hỗ trợ cho công việc dọn rác mỗi khi đối tượng không còn được tham chiếu đến là đối tượng GC (garbage collector). Đối tượng này thực hiện công việc rọn rác qua 3 bước như sau:
- Tìm kiếm những đối tượng không còn được tham chiếu nữa
- Cố gắng các hoạt động để giải phóng đối tượng không còn được tham chiếu
- Thi hành phương thức finalize() để hủy đối tượng
Ngoài ra, trong cơ chế hủy bỏ của C# còn có phương thức Dispose là một phương thức đối lập hoàn toàn so với phương thức Finalize() của đối tượng GC.
Phương thức Dispose là cho phép chương trình thực hiện các công việc dọn dẹp hay giải phóng tài nguyên mong muốn mà không phải chờ cho đến khi phương thức Finalize() được gọi. Khi đó ta không được phép dùng phương thức Finalize() trong đối tượng mà thay vào đó ta sẽ gọi một phương thức tĩnh của lớp GC (garbage collector) là GC.SuppressFinalize( this). Sau đó phương thức Finalize() sử dụng để gọi phương thức Dispose() như sau:


public void Dispose()
{
// Thực hiện công việc dọn dẹp
// Yêu cầu bộ thu dọc GC trong thực hiện kết thúc
GC.SuppressFinalize( this );
}
public override void Finalize()
{
Dispose();
base.Finalize();
}


Câu lệnh using:

Mặc dù phương thức rọn rác của C# là tự động cung cấp nhưng không thể chác rằng phương thức Dispose() sẽ được gọi và việc giải phóng tài nguyên không thể xác định được. Câu lệnh using sẽ đảm bảo rằng phương thức Dispose() sẽ được gọi trong thời gian sớm nhất. Sử dụng using bằng cách gọi câu lệnh using và truyền vào tên đối tượng muốn hủy bỏ:

using (tên đối tượng cần hủy bỏ)

Khi trong lớp không khai báo một destructor nào thì trình biên dịch sẽ gọi tiến trình Garbage collector trong ngôn ngữ C# để giải phóng đối tượng này trong bộ nhớ. Phần lớn trong ngôn ngữ C# thì có cơ chế tự động gom rác mỗi khi biến đó không được tham chiếu đến nên chúng ta không cần quan tâm nhiều đến nó như trong C++.

2. Sử dụng các thành viên tĩnh static:


Thành viên tĩnh không thể hiện gì cho lớp về cả thuộc tính và phương thức mà nó như là một thành phần của lớp.

Sử dụng từ khóa static để khai báo một thành viên tĩnh. Thành phần tĩnh chỉ được sử dụng với lớp, phương thức, thuộc tính, sự kiện và constructor nhưng không thể được sử dụng với những bản dãy, indexer, destructor hay kiểu khác với những lớp.
Sử dụng phương thức tĩnh:

Một phương thức static có phạm vi hoạt động giống như một phương thức toàn cục mà không cần tạo ra bất cứ một thể hiện nào của lớp cả. Toàn cục ở đây hiểu theo nghĩa là toàn cục trong lớp.

Gọi một phương thức static:

Về bản chất thành phần static là một thành phần của lớp không thể hiện trả về vì vậy không có một tham chiếu this. Một hàm static không thể trực tiếp truy xuất đến các thành viên không static mà phải thông qua một đối tượng thể hiện của lớp đó như sau:

Tenlop.tenhamtinh ([danh sach tham so neu co]:

Ví dụ diem.hien() là lời gọi đến phương thúc tĩnh có tên là hien() của lớp diem

Sử dụng các phương thức khởi tạo static:
Trong khai báo một static constructor không có từ khóa truy cập. Phương thức tĩnh chỉ có thể truy nhập đến thành phần dữ liệu cũng có tính chất tĩnh mà thôi. Nếu trong khai báo lớp có một hàm static constructor thì hàm này sẽ được gọi trước khi bất cứ một thể hiện nào của lớp được tạo ra.

Việc sử dụng hàm khởi tạo static cần được cân nhắc kỹ lưỡng vì chúng ta không thể theo dõi nó được như trong C++ vì thế thường gây ra những hậu quả khó lường.

- Khởi tạo private constructor:

Việc sử dụng một hàm khởi tạo private trong lớp sẽ có tác dụng ngăn chặn tạo ra bất kì một đối tượng nào của lớp. Hàm khởi tạo private này mặc nhiên, không có tham số gì cả và trống rỗng. Khi đó trong lớp sẽ không có hàm khởi tạo public nên sẽ không khởi tạo được bất cứ một thành viên thể hiện nào.

Ví dụ không muốn tạo ra bất kì một đối tượng nào của lớp diem thì trong khi định nghĩa lớp ta sẽ định nghĩa thêm một hàm khởi tạo tầm vực là private như sau:

private diem ()

{

// không làm gì cả

}


Sử dụng các thuộc tính tĩnh:

Trong C# không hề có một biến nào có phạm vi hoạt động toàn cục như trong một số ngôn ngữ lập trình khác ( pascal, C, C++, Visual Basic …) việc sử dụng một biến với mục đích “toàn cục” trở nên là một điều không thể. Biến toàn cục trong các ngôn ngữ khác được hiểu là toàn cục trong ứng dụng nhưng đối với C# thì toàn cục theo nghĩa hiểu của nó là toàn cục trong một lớp và không có khái niệm toàn cục trong toàn bộ chương trình. Nếu ta khai báo một biến thành viên tĩnh của lớp thì biến thành viên tĩnh này có tầm vực hoạt động theo ý nghĩa toàn cục đó. Các biến thành viên tĩnh có hoạt động tích cực trong vai trò này.

Lớp tĩnh:

Một lớp có thể được xây dựng là một lớp tĩnh và chỉ chứa các thành phần tĩnh mà thôi và nó không cho phép tạo thể hiện của lớp bằng việc sử dụng từ khóa new. Lớp static thường được tải tự động trong Net.Framework khi chương trình hoặc namespace chứa lớp được tải lên.Việc tạo một static class giống với việc tạo ra một lớp mà chỉ chứa một private constructor. Như vậy là có thể kiểm tra chắc chắn và đảm bảo những thành viên của lớp này không thể được tạo ra.

Khi nào thì sử dụng các thuộc tính tĩnh và khi nào thì sử dụng phương thức tĩnh:

+ Sử dụng phương thức tĩnh khi muốn khởi tạo một giá trị nào đó ngay khi chương trình biên dịch mà không cần tạo thể hiện của lớp hay việc tạo một thiết lập duy nhất mà một sự chuẩn bị (initializer) không thể thực hiện được và chỉ cần thực hiện một lần mà thôi. Trong trường hợp nếu ta muốn lớp mà sau khi ta định nghĩa không thể tao ra một thể hiện nào của nó thì ta sử dụng phương thức khởi tạo private (bên trong thân phương thức trống rỗng).

+ Sử dụng biến static khi bạn muốn tạo ra một biến có vai trò toàn cục trong lớp để theo dõi hoạt động của nó. Ví dụ như bạn tạo ra một biến static để theo dõi xem ở thời điểm hiện tại có bao nhiêu biến đối tượng được tạo ra chẳng hạn. Khi đó đi cùng với việc tạo đối tượng bạn hãy gọi phương thức chứa thành phần tĩnh này thì bạn có thể theo dõi như dùng biến toàn cục trong các ngôn ngữ lập trình khác.

+ Sử dụng lớp tĩnh để chứa các phương thức mà không liên quan tới một đối tượng đặc biệt. Chẳng hạn như yêu cầu tạo tập hợp phương thức không hành động theo thể hiện dữ liệu và không liên quan đến một đối tượng đặc biệt nào. Một static class không cho phép thừa kế.

3. Nạp chồng phương thức

Chồng phương thức là việc tạo ra nhiều phương thức trùng tên với nhau nhưng nhận các tham số khác nhau hay trả về dữ liệu khác nhau. Việc phân biệt các hàm này dựa vào dấu ấn:

+ Khác nhau các tham số: khác nhau về số lượng tham số
+ Khác nhau về kiểu dữ liệu của tham số, kiểu dữ liệu trả về của phương thức.
Khi nạp chồng một phương thức ta phải thay đổi kí hiệu (dấu ấn) của phương thức, số tham số hay kiểu dữ liệu của tham số hoặc có thể thay đổi cả về giá trị của các tham số. Khi đó thì thực chất không phải là nạp chồng phương thức mà đó là hai phương thức khác nhau có cùng tên nhưng khác nhau về kiểu giá trị trả về. Đó là một điều cần chú ý khi nạp chồng phương thức.

Khi gọi một phương thức có nạp chồng phương thức thì cần chú ý về số tham số, kiểu dữ liệu cho phù hợp với từng phương thức nếu không thì sẽ phát sinh lỗi khi biên dịch chương trình.

4. Đóng gói dữ liệu thông qua các thuộc tính:

Đóng gói dữ liệu với thuộc tính thực chất là một quá trình ta lấy giá trị cho biến thành viên và thiết lập giá trị đó cho biến để nó được truy cập thông qua phương thức của lớp mà không qua đối tượng. Trong C# cung cấp khả năng khai báo hàm chung gọi là thuộc tính cho hàm get và set



+ Phương thức get trả về một đối tượng dữ liệu kiểu thuộc tính, phương thức này giống phương thức của đối tượng.
+ Phương thức set: thiết lập giá trị của thuộc tính, có kiểu trả về là void. Khi thiết lập một phương thức set phải dùng từ khóa value để tượng trưng cho đối được trao và được giữ bởi thuộc tính.
Lợi ích của việc gói ghém dữ liệu là che giấu thông tin mặc dù người sử dụng vẫn thao tác với thuộc tính.
☺Vài điểm cần chú ý khi định nghĩa một thuộc tính


public string (tên thuộc tính)
{
get { //Lấy giá tri thuộc tính }
set { //Trả về giá trị cùng kiểu với thuộc tính đã khai báo}
}



+ Ta không khai báo tường minh các tham số trong thủ tục set..
+ Có thể chỉ xây dựng thuộc tính chỉ đọc hoặc chỉ viêt bằng cách bỏ đi một trong hai thủ tục trên.
+ Nếu ta muốn tạo một thuộc tính có public để đọc nhưng lại muốn hạn chế protected trong gán thì phải tạo thuộc tính chỉ đọc public sau đó tạo một hàm set() với truy cập protected ở bên ngoài thuộc tính đó.
+ C# cho phép bạn tạo một thuộc tính virtual hay abstract ( xem thêm kế thừa và đa hình) cú pháp như sau:


public abstract string (tên thuộc tính)
{
get;
set;
}

Admin
Admin
Admin

Giới tính Giới tính : Nam Tổng số bài gửi Tổng số bài gửi : 144
Điểm Điểm : 401
Cám ơn Cám ơn : 8
ngày Sinh ngày Sinh : 30/06/1990
Ngày tham gia Ngày tham gia : 04/09/2011
Tuổi Tuổi : 26
Đến từ Đến từ : Khoái Châu -Hưng Yên

Xem lý lịch thành viên http://nhomai9xhy.forumvi.com

Về Đầu Trang Go down

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang


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