Trang chủ
Bài viết mới
Diễn đàn
Bài mới trên hồ sơ
Hoạt động mới nhất
VIDEO
Mùa Tết
Văn Học Trẻ
Văn Học News
Media
New media
New comments
Search media
Đại Học
Đại cương
Chuyên ngành
Triết học
Kinh tế
KHXH & NV
Công nghệ thông tin
Khoa học kĩ thuật
Luận văn, tiểu luận
Phổ Thông
Lớp 12
Ngữ văn 12
Lớp 11
Ngữ văn 11
Lớp 10
Ngữ văn 10
LỚP 9
Ngữ văn 9
Lớp 8
Ngữ văn 8
Lớp 7
Ngữ văn 7
Lớp 6
Ngữ văn 6
Tiểu học
Thành viên
Thành viên trực tuyến
Bài mới trên hồ sơ
Tìm trong hồ sơ cá nhân
Credits
Transactions
Xu: 0
Đăng nhập
Đăng ký
Có gì mới?
Tìm kiếm
Tìm kiếm
Chỉ tìm trong tiêu đề
Bởi:
Hoạt động mới nhất
Đăng ký
Menu
Đăng nhập
Đăng ký
Install the app
Cài đặt
Chào mừng Bạn tham gia Diễn Đàn VNKienThuc.com -
Định hướng Forum
Kiến Thức
- HÃY TẠO CHỦ ĐỀ KIẾN THỨC HỮU ÍCH VÀ CÙNG NHAU THẢO LUẬN Kết nối:
VNK X
-
VNK groups
| Nhà Tài Trợ:
BhnongFood X
-
Bhnong groups
-
Đặt mua Bánh Bhnong
CÔNG NGHỆ
Công Nghệ Thông Tin
Code
C# và tính bao đóng của nó
JavaScript is disabled. For a better experience, please enable JavaScript in your browser before proceeding.
You are using an out of date browser. It may not display this or other websites correctly.
You should upgrade or use an
alternative browser
.
Trả lời chủ đề
Nội dung
<blockquote data-quote="uocmo_kchodoi" data-source="post: 177523" data-attributes="member: 165510"><p style="text-align: center"><strong><span style="color: #ff0000">TÍNH BAO ĐÓNG (ĐÓNG GÓI) TRONG C#</span></strong></p> <p style="text-align: center"><strong><span style="color: #ff0000"></span></strong></p><p>Encapsulation (Tính bao đóng) được định nghĩa là "tiến trình đóng gói một hoặc nhiều mục bên trong một gói logic hoặc vật lý". Một cách diễn đạt khác là quá trình che giấu một hoặc nhiều mục tin trong một khối vật lý hoặc logic. Trong phương pháp lập trình hướng đối tượng, đóng gói giúp ngăn chặn truy cập đến các thực hiện chi tiết. Tính đóng gói, trong phương pháp lập trình hướng đối tượng, ngăn cản việc truy cập tới chi tiết của trình trình triển khai (Implementation Detail).</p><p></p><p><strong>Abstraction</strong>(tính trừu tượng) và <strong>encapsulation</strong> là hai đặc điểm có liên quan nhau trong lập trình hướng đối tượng. Trừu tượng cho phép tạo ra các thông tin không được hiển thị rõ ràng và đóng gói cho phép một người lập trình <em>thể hiện tính trừu tượng ở mức độ mong muốn</em>.</p><p></p><p>Tính đóng gói được triển khai bởi sử dụng Access Specifier. Một Access Specifier định nghĩa phạm vi và tính nhìn thấy của một thành viên lớp. C# hỗ trợ các Access Specifier sau:</p><ul> <li data-xf-list-type="ul">Public</li> <li data-xf-list-type="ul">Private</li> <li data-xf-list-type="ul">Protected</li> <li data-xf-list-type="ul">Internal</li> <li data-xf-list-type="ul">Protected internal</li> </ul><p><span style="font-size: 18px"><strong>1. Public Access Specifier trong C#</strong></span></p><p><span style="font-size: 18px"></span></p><p>Public Access Specifier trong C# cho phép một lớp trưng bày các biến thành viên và các hàm thành viên của nó tới các hàm và đối tượng khác. Bất kỳ thành viên public nào trong C# có thể được truy cập từ bên ngoài lớp đó.</p><p></p><p>Ví dụ sau minh họa Public Access Specifier trong C#:</p><p></p><p>Để minh họa rõ ràng tính đóng gói trong C#, mình tạo hai lớp có tên lần lượt là: Rectangle vàExecuteRectangle.</p><p></p><p>Lớp Rectangle: chứa các thuộc tính, phương thức</p><p></p><p><em><span style="color: #5900b3">using System;</span></em></p><p><em><span style="color: #5900b3">namespace VietJackCsharp</span></em></p><p><em><span style="color: #5900b3">{</span></em></p><p><em><span style="color: #5900b3"> class Rectangle</span></em></p><p><em><span style="color: #5900b3"> {</span></em></p><p><em><span style="color: #5900b3"> //cac bien thanh vien</span></em></p><p><em><span style="color: #5900b3"> public double length;</span></em></p><p><em><span style="color: #5900b3"> public double width;</span></em></p><p><em><span style="color: #5900b3"></span></em></p><p><em><span style="color: #5900b3"> //cac phuong thuc</span></em></p><p><em><span style="color: #5900b3"> public double GetArea()</span></em></p><p><em><span style="color: #5900b3"> {</span></em></p><p><em><span style="color: #5900b3"> return length * width;</span></em></p><p><em><span style="color: #5900b3"> }</span></em></p><p><em><span style="color: #5900b3"> public void Display()</span></em></p><p><em><span style="color: #5900b3"> {</span></em></p><p><em><span style="color: #5900b3"> Console.WriteLine("Chieu dai: {0}", length);</span></em></p><p><em><span style="color: #5900b3"> Console.WriteLine("Chieu rong: {0}", width);</span></em></p><p><em><span style="color: #5900b3"> Console.WriteLine("Dien tich: {0}", GetArea());</span></em></p><p><em><span style="color: #5900b3"> }</span></em></p><p><em><span style="color: #5900b3"> }</span></em></p><p><em><span style="color: #5900b3">}</span></em></p><p><span style="color: #404040">Lớp ExecuteRectangle: chứa phương thức main() để thao tác trên đối tượng Rectangle</span></p><p><em><span style="color: #5900b3"></span></em></p><p><em><span style="color: #5900b3">using System;</span></em></p><p><em><span style="color: #5900b3">namespace VietJackCsharp</span></em></p><p><em><span style="color: #5900b3">{</span></em></p><p><em><span style="color: #5900b3"> class ExecuteRectangle</span></em></p><p><em><span style="color: #5900b3"> {</span></em></p><p><em><span style="color: #5900b3"> static void Main(string[] args)</span></em></p><p><em><span style="color: #5900b3"> {</span></em></p><p><em><span style="color: #5900b3"> Console.WriteLine("Tinh dong goi trong C#");</span></em></p><p><em><span style="color: #5900b3"> Console.WriteLine("-------------------------------");</span></em></p><p><em><span style="color: #5900b3"></span></em></p><p><em><span style="color: #5900b3"> //tao doi tuong Rectangle</span></em></p><p><em><span style="color: #5900b3"> Rectangle r = new Rectangle();</span></em></p><p><em><span style="color: #5900b3"> //thiet lap cac thuoc tinh</span></em></p><p><em><span style="color: #5900b3"> r.length = 4.5;</span></em></p><p><em><span style="color: #5900b3"> r.width = 3.5;</span></em></p><p><em><span style="color: #5900b3"> //goi phuong thuc</span></em></p><p><em><span style="color: #5900b3"> r.Display();</span></em></p><p><em><span style="color: #5900b3"> Console.ReadLine();</span></em></p><p><em><span style="color: #5900b3"></span></em></p><p><em><span style="color: #5900b3"> Console.ReadKey();</span></em></p><p><em><span style="color: #5900b3"> }</span></em></p><p><em><span style="color: #5900b3"> }</span></em></p><p><em><span style="color: #5900b3">}</span></em></p><p></p><p>Nếu bạn không sử dụng lệnh Console.ReadKey(); thì chương trình sẽ chạy và kết thúc luôn (nhanh quá đến nỗi bạn không kịp nhìn kết quả). Lệnh này cho phép chúng ta nhìn kết quả một cách rõ ràng hơn.</p><p></p><p>Biên dịch và chạy chương trình C# trên sẽ cho kết quả sau:</p><p></p><p style="text-align: center"><img src="https://vietjack.com/csharp/images/tinh-dong-goi.PNG" alt="" class="fr-fic fr-dii fr-draggable " data-size="" style="" /></p> <p style="text-align: center"></p><p>Trong ví dụ, các biến thành viên length và width được khai báo là public, vì thế chúng có thể được truy cập từ hàm Main() bởi sử dụng một Instance (một sự thể hiện) của lớp Rectangle, tên là r.</p><p></p><p>Hàm thành viên <em>Display()</em> và <em>GetArea()</em> cũng có thể truy cập các biến này một cách trực tiếp mà không cần sử dụng bất kỳ instance nào của lớp.</p><p></p><p>Hàm thành viên <em>Display()</em> cũng được khai báo là public, vì thế nó cũng có thể được truy cập từ hàm Main() bởi sử dụng một Instance (một sự thể hiện) của lớp Rectangle, tên là r.</p><p></p><p><span style="font-size: 18px"><strong>2. Private Access Specifier trong C#</strong></span></p><p><span style="font-size: 18px"></span></p><p>Private Access Specifier trong C# cho phép một lớp ẩn các biến thành viên và các hàm thành viên của nó với các hàm và đối tượng khác. Chỉ có các hàm trong cùng lớp đó có thể truy cập tới các thành viên private. Ngay cả khi một Instance của một lớp cũng không thể truy cập các thành viên private của nó.</p><p></p><p>Ví dụ sau minh họa Private Access Specifier trong C#:</p><p></p><p>Lớp Rectangle</p><p></p><p><em><span style="color: #5900b3">using System;</span></em></p><p><em><span style="color: #5900b3">namespace VietJackCsharp</span></em></p><p><em><span style="color: #5900b3">{</span></em></p><p><em><span style="color: #5900b3"> class Rectangle</span></em></p><p><em><span style="color: #5900b3"> {</span></em></p><p><em><span style="color: #5900b3"> //cac bien thanh vien</span></em></p><p><em><span style="color: #5900b3"> private double length;</span></em></p><p><em><span style="color: #5900b3"> private double width;</span></em></p><p><em><span style="color: #5900b3"></span></em></p><p><em><span style="color: #5900b3"> //cac phuong thuc</span></em></p><p><em><span style="color: #5900b3"> public void Acceptdetails()</span></em></p><p><em><span style="color: #5900b3"> {</span></em></p><p><em><span style="color: #5900b3"> Console.WriteLine("Nhap chieu dai: ");</span></em></p><p><em><span style="color: #5900b3"> length = Convert.ToDouble(Console.ReadLine());</span></em></p><p><em><span style="color: #5900b3"> Console.WriteLine("Nhap chieu rong: ");</span></em></p><p><em><span style="color: #5900b3"> width = Convert.ToDouble(Console.ReadLine());</span></em></p><p><em><span style="color: #5900b3"> }</span></em></p><p><em><span style="color: #5900b3"> public double GetArea()</span></em></p><p><em><span style="color: #5900b3"> {</span></em></p><p><em><span style="color: #5900b3"> return length * width;</span></em></p><p><em><span style="color: #5900b3"> }</span></em></p><p><em><span style="color: #5900b3"> public void Display()</span></em></p><p><em><span style="color: #5900b3"> {</span></em></p><p><em><span style="color: #5900b3"> Console.WriteLine("Chieu dai: {0}", length);</span></em></p><p><em><span style="color: #5900b3"> Console.WriteLine("Chieu rong: {0}", width);</span></em></p><p><em><span style="color: #5900b3"> Console.WriteLine("Dien tich: {0}", GetArea());</span></em></p><p><em><span style="color: #5900b3"> }</span></em></p><p><em><span style="color: #5900b3"> }</span></em></p><p><em><span style="color: #5900b3">}</span></em></p><p><span style="color: #404040">Lớp ExecuteRectangle</span></p><p><em><span style="color: #5900b3"></span></em></p><p><em><span style="color: #5900b3">using System;</span></em></p><p><em><span style="color: #5900b3">namespace VietJackCsharp</span></em></p><p><em><span style="color: #5900b3">{</span></em></p><p><em><span style="color: #5900b3"> class ExecuteRectangle</span></em></p><p><em><span style="color: #5900b3"> {</span></em></p><p><em><span style="color: #5900b3"> static void Main(string[] args)</span></em></p><p><em><span style="color: #5900b3"> {</span></em></p><p><em><span style="color: #5900b3"> Console.WriteLine("Tinh dong goi trong C#");</span></em></p><p><em><span style="color: #5900b3"> Console.WriteLine("-------------------------------");</span></em></p><p><em><span style="color: #5900b3"></span></em></p><p><em><span style="color: #5900b3"> //tao doi tuong Rectangle</span></em></p><p><em><span style="color: #5900b3"> Rectangle r = new Rectangle();</span></em></p><p><em><span style="color: #5900b3"> //thiet lap cac thuoc tinh</span></em></p><p><em><span style="color: #5900b3"> r.length = 4.5;</span></em></p><p><em><span style="color: #5900b3"> r.width = 3.5;</span></em></p><p><em><span style="color: #5900b3"> //goi phuong thuc</span></em></p><p><em><span style="color: #5900b3"> r.Acceptdetails();</span></em></p><p><em><span style="color: #5900b3"> r.Display();</span></em></p><p><em><span style="color: #5900b3"> Console.ReadLine();</span></em></p><p><em><span style="color: #5900b3"></span></em></p><p><em><span style="color: #5900b3"> Console.ReadKey();</span></em></p><p><em><span style="color: #5900b3"> }</span></em></p><p><em><span style="color: #5900b3"> }</span></em></p><p><em><span style="color: #5900b3">}</span></em></p><p></p><p>Trong ví dụ, các biến thành viên length và width được khai báo private, vì thế chúng không thể được truy cập từ hàm Main(). Trong Visual Studio 2010 sẽ báo hiệu một dấu gạch đỏ bên dưới hai biến này, giống như:</p><p></p><p><img src="https://vietjack.com/csharp/images/tinh-dong-goi-1.PNG" alt="" class="fr-fic fr-dii fr-draggable " data-size="" style="" /></p><p>Các hàm thành viên <em>AcceptDetails()</em> và <em>Display()</em> có thể truy cập các biến này. Khi các hàm thành viên <em>AcceptDetails()</em> và <em>Display()</em> được khai báo public, chúng có thể được truy cập từ hàm Main() bởi sử dụng một Instance (một sự thể hiện) của lớp Rectangle, tên là r.</p><p></p><p><span style="font-size: 18px"><strong>3. Protected Access Specifier trong C#</strong></span></p><p><span style="font-size: 18px"></span></p><p>Protected Access Specifier trong C# cho phép một lớp con truy cập các biến thành viên và các hàm thành viên của lớp cơ sở của nó. Cách này giúp triển khai tính kế thừa. Chúng ta sẽ thảo luận chi tiết về tính kế thừa trong chương sau đó.</p><p></p><p><span style="font-size: 18px"><strong>4. Internal Access Specifier trong C#</strong></span></p><p><span style="font-size: 18px"></span></p><p>Internal Access Specifier trong C# cho phép một lớp trưng bày các biến thành viên và các hàm thành viên của nó tới các hàm và đối tượng khác trong <em>Assembly</em> hiện tại. Nói cách khác, bất kỳ thành viên nào với Internal Access Specifier trong C# có thể được truy cập từ bất kỳ lớp hoặc phương thức được định nghĩa bên trong ứng dụng mà thành viên đó được định nghĩa.</p><p></p><p>Ví dụ sau minh họa Internal Access Specifier trong C#:</p><p></p><p>Lớp Rectangle</p><p></p><p><em><span style="color: #5900b3">using System;</span></em></p><p><em><span style="color: #5900b3">namespace VietJackCsharp</span></em></p><p><em><span style="color: #5900b3">{</span></em></p><p><em><span style="color: #5900b3"> class Rectangle</span></em></p><p><em><span style="color: #5900b3"> {</span></em></p><p><em><span style="color: #5900b3"> //cac bien thanh vien</span></em></p><p><em><span style="color: #5900b3"> internal double length;</span></em></p><p><em><span style="color: #5900b3"> internal double width;</span></em></p><p><em><span style="color: #5900b3"></span></em></p><p><em><span style="color: #5900b3"> //cac phuong thuc</span></em></p><p><em><span style="color: #5900b3"> double GetArea()</span></em></p><p><em><span style="color: #5900b3"> {</span></em></p><p><em><span style="color: #5900b3"> return length * width;</span></em></p><p><em><span style="color: #5900b3"> }</span></em></p><p><em><span style="color: #5900b3"> public void Display()</span></em></p><p><em><span style="color: #5900b3"> {</span></em></p><p><em><span style="color: #5900b3"> Console.WriteLine("Chieu dai: {0}", length);</span></em></p><p><em><span style="color: #5900b3"> Console.WriteLine("Chieu rong: {0}", width);</span></em></p><p><em><span style="color: #5900b3"> Console.WriteLine("Dien tich: {0}", GetArea());</span></em></p><p><em><span style="color: #5900b3"> }</span></em></p><p><em><span style="color: #5900b3"> }</span></em></p><p><em><span style="color: #5900b3">}</span></em></p><p><em><span style="color: #404040">Lớp ExecuteRectangle</span></em></p><p><em><span style="color: #5900b3"></span></em></p><p><em><span style="color: #5900b3">using System;</span></em></p><p><em><span style="color: #5900b3">namespace VietJackCsharp</span></em></p><p><em><span style="color: #5900b3">{</span></em></p><p><em><span style="color: #5900b3"> class ExecuteRectangle</span></em></p><p><em><span style="color: #5900b3"> {</span></em></p><p><em><span style="color: #5900b3"> static void Main(string[] args)</span></em></p><p><em><span style="color: #5900b3"> {</span></em></p><p><em><span style="color: #5900b3"> Console.WriteLine("Tinh dong goi trong C#");</span></em></p><p><em><span style="color: #5900b3"> Console.WriteLine("-------------------------------");</span></em></p><p><em><span style="color: #5900b3"></span></em></p><p><em><span style="color: #5900b3"> //tao doi tuong Rectangle</span></em></p><p><em><span style="color: #5900b3"> Rectangle r = new Rectangle();</span></em></p><p><em><span style="color: #5900b3"> //thiet lap cac thuoc tinh</span></em></p><p><em><span style="color: #5900b3"> r.length = 4.5;</span></em></p><p><em><span style="color: #5900b3"> r.width = 3.5;</span></em></p><p><em><span style="color: #5900b3"> //goi phuong thuc</span></em></p><p><em><span style="color: #5900b3"> r.Display();</span></em></p><p><em><span style="color: #5900b3"> Console.ReadLine();</span></em></p><p><em><span style="color: #5900b3"></span></em></p><p><em><span style="color: #5900b3"> Console.ReadKey();</span></em></p><p><em><span style="color: #5900b3"> }</span></em></p><p><em><span style="color: #5900b3"> }</span></em></p><p><em><span style="color: #5900b3">}</span></em></p><p></p><p>Nếu bạn không sử dụng lệnh Console.ReadKey(); thì chương trình sẽ chạy và kết thúc luôn (nhanh quá đến nỗi bạn không kịp nhìn kết quả). Lệnh này cho phép chúng ta nhìn kết quả một cách rõ ràng hơn.</p><p></p><p>Biên dịch và chạy chương trình C# trên sẽ cho kết quả sau:</p><p></p><p style="text-align: center"><img src="https://vietjack.com/csharp/images/tinh-dong-goi.PNG" alt="" class="fr-fic fr-dii fr-draggable " data-size="" style="" /></p> <p style="text-align: center"></p><p>Trong ví dụ, bạn chú ý rằng hàm thành viên GetArea() không được khai báo với bất kỳ Access Specifier nào. Thì theo mặc định, Access Specifier của một thành viên lớp nếu chúng ta không khai báo là private.</p><p></p><p><span style="font-size: 18px"><strong>5. Protected Internal Access Specifier trong C#</strong></span></p><p><span style="font-size: 18px"></span></p><p>Protected Internal Access Specifier trong C# cho phép một lớp ẩn các biến thành viên và các hàm thành viên của nó với các hàm và đối tượng khác, ngoại trừ một lớp con bên trong cùng ứng dụng đó. Điều này cũng được sử dụng trong khi triển khai tính kế thừa trong C#.</p><p></p><p>Trên đây là bài viết về tính đóng gói trong C#. Mời các bạn tìm hiểu thêm các bài viết khác về C# trên trang vnkienthuc.com nhé.</p><p></p><p style="text-align: right">Nguồn: vietjeck.com</p></blockquote><p></p>
[QUOTE="uocmo_kchodoi, post: 177523, member: 165510"] [CENTER][B][COLOR=#ff0000]TÍNH BAO ĐÓNG (ĐÓNG GÓI) TRONG C# [/COLOR][/B][/CENTER] Encapsulation (Tính bao đóng) được định nghĩa là "tiến trình đóng gói một hoặc nhiều mục bên trong một gói logic hoặc vật lý". Một cách diễn đạt khác là quá trình che giấu một hoặc nhiều mục tin trong một khối vật lý hoặc logic. Trong phương pháp lập trình hướng đối tượng, đóng gói giúp ngăn chặn truy cập đến các thực hiện chi tiết. Tính đóng gói, trong phương pháp lập trình hướng đối tượng, ngăn cản việc truy cập tới chi tiết của trình trình triển khai (Implementation Detail). [B]Abstraction[/B](tính trừu tượng) và [B]encapsulation[/B] là hai đặc điểm có liên quan nhau trong lập trình hướng đối tượng. Trừu tượng cho phép tạo ra các thông tin không được hiển thị rõ ràng và đóng gói cho phép một người lập trình [I]thể hiện tính trừu tượng ở mức độ mong muốn[/I]. Tính đóng gói được triển khai bởi sử dụng Access Specifier. Một Access Specifier định nghĩa phạm vi và tính nhìn thấy của một thành viên lớp. C# hỗ trợ các Access Specifier sau: [LIST] [*]Public [*]Private [*]Protected [*]Internal [*]Protected internal [/LIST] [SIZE=5][B]1. Public Access Specifier trong C#[/B] [/SIZE] Public Access Specifier trong C# cho phép một lớp trưng bày các biến thành viên và các hàm thành viên của nó tới các hàm và đối tượng khác. Bất kỳ thành viên public nào trong C# có thể được truy cập từ bên ngoài lớp đó. Ví dụ sau minh họa Public Access Specifier trong C#: Để minh họa rõ ràng tính đóng gói trong C#, mình tạo hai lớp có tên lần lượt là: Rectangle vàExecuteRectangle. Lớp Rectangle: chứa các thuộc tính, phương thức [I][COLOR=#5900b3]using System; namespace VietJackCsharp { class Rectangle { //cac bien thanh vien public double length; public double width; //cac phuong thuc public double GetArea() { return length * width; } public void Display() { Console.WriteLine("Chieu dai: {0}", length); Console.WriteLine("Chieu rong: {0}", width); Console.WriteLine("Dien tich: {0}", GetArea()); } } }[/COLOR][/I] [COLOR=#404040]Lớp ExecuteRectangle: chứa phương thức main() để thao tác trên đối tượng Rectangle[/COLOR] [I][COLOR=#5900b3] using System; namespace VietJackCsharp { class ExecuteRectangle { static void Main(string[] args) { Console.WriteLine("Tinh dong goi trong C#"); Console.WriteLine("-------------------------------"); //tao doi tuong Rectangle Rectangle r = new Rectangle(); //thiet lap cac thuoc tinh r.length = 4.5; r.width = 3.5; //goi phuong thuc r.Display(); Console.ReadLine(); Console.ReadKey(); } } }[/COLOR][/I] Nếu bạn không sử dụng lệnh Console.ReadKey(); thì chương trình sẽ chạy và kết thúc luôn (nhanh quá đến nỗi bạn không kịp nhìn kết quả). Lệnh này cho phép chúng ta nhìn kết quả một cách rõ ràng hơn. Biên dịch và chạy chương trình C# trên sẽ cho kết quả sau: [CENTER][IMG]https://vietjack.com/csharp/images/tinh-dong-goi.PNG[/IMG] [/CENTER] Trong ví dụ, các biến thành viên length và width được khai báo là public, vì thế chúng có thể được truy cập từ hàm Main() bởi sử dụng một Instance (một sự thể hiện) của lớp Rectangle, tên là r. Hàm thành viên [I]Display()[/I] và [I]GetArea()[/I] cũng có thể truy cập các biến này một cách trực tiếp mà không cần sử dụng bất kỳ instance nào của lớp. Hàm thành viên [I]Display()[/I] cũng được khai báo là public, vì thế nó cũng có thể được truy cập từ hàm Main() bởi sử dụng một Instance (một sự thể hiện) của lớp Rectangle, tên là r. [SIZE=5][B]2. Private Access Specifier trong C#[/B] [/SIZE] Private Access Specifier trong C# cho phép một lớp ẩn các biến thành viên và các hàm thành viên của nó với các hàm và đối tượng khác. Chỉ có các hàm trong cùng lớp đó có thể truy cập tới các thành viên private. Ngay cả khi một Instance của một lớp cũng không thể truy cập các thành viên private của nó. Ví dụ sau minh họa Private Access Specifier trong C#: Lớp Rectangle [I][COLOR=#5900b3]using System; namespace VietJackCsharp { class Rectangle { //cac bien thanh vien private double length; private double width; //cac phuong thuc public void Acceptdetails() { Console.WriteLine("Nhap chieu dai: "); length = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("Nhap chieu rong: "); width = Convert.ToDouble(Console.ReadLine()); } public double GetArea() { return length * width; } public void Display() { Console.WriteLine("Chieu dai: {0}", length); Console.WriteLine("Chieu rong: {0}", width); Console.WriteLine("Dien tich: {0}", GetArea()); } } }[/COLOR][/I] [COLOR=#404040]Lớp ExecuteRectangle[/COLOR] [I][COLOR=#5900b3] using System; namespace VietJackCsharp { class ExecuteRectangle { static void Main(string[] args) { Console.WriteLine("Tinh dong goi trong C#"); Console.WriteLine("-------------------------------"); //tao doi tuong Rectangle Rectangle r = new Rectangle(); //thiet lap cac thuoc tinh r.length = 4.5; r.width = 3.5; //goi phuong thuc r.Acceptdetails(); r.Display(); Console.ReadLine(); Console.ReadKey(); } } }[/COLOR][/I] Trong ví dụ, các biến thành viên length và width được khai báo private, vì thế chúng không thể được truy cập từ hàm Main(). Trong Visual Studio 2010 sẽ báo hiệu một dấu gạch đỏ bên dưới hai biến này, giống như: [IMG]https://vietjack.com/csharp/images/tinh-dong-goi-1.PNG[/IMG] Các hàm thành viên [I]AcceptDetails()[/I] và [I]Display()[/I] có thể truy cập các biến này. Khi các hàm thành viên [I]AcceptDetails()[/I] và [I]Display()[/I] được khai báo public, chúng có thể được truy cập từ hàm Main() bởi sử dụng một Instance (một sự thể hiện) của lớp Rectangle, tên là r. [SIZE=5][B]3. Protected Access Specifier trong C#[/B] [/SIZE] Protected Access Specifier trong C# cho phép một lớp con truy cập các biến thành viên và các hàm thành viên của lớp cơ sở của nó. Cách này giúp triển khai tính kế thừa. Chúng ta sẽ thảo luận chi tiết về tính kế thừa trong chương sau đó. [SIZE=5][B]4. Internal Access Specifier trong C#[/B] [/SIZE] Internal Access Specifier trong C# cho phép một lớp trưng bày các biến thành viên và các hàm thành viên của nó tới các hàm và đối tượng khác trong [I]Assembly[/I] hiện tại. Nói cách khác, bất kỳ thành viên nào với Internal Access Specifier trong C# có thể được truy cập từ bất kỳ lớp hoặc phương thức được định nghĩa bên trong ứng dụng mà thành viên đó được định nghĩa. Ví dụ sau minh họa Internal Access Specifier trong C#: Lớp Rectangle [I][COLOR=#5900b3]using System; namespace VietJackCsharp { class Rectangle { //cac bien thanh vien internal double length; internal double width; //cac phuong thuc double GetArea() { return length * width; } public void Display() { Console.WriteLine("Chieu dai: {0}", length); Console.WriteLine("Chieu rong: {0}", width); Console.WriteLine("Dien tich: {0}", GetArea()); } } }[/COLOR] [COLOR=#404040]Lớp ExecuteRectangle[/COLOR] [COLOR=#5900b3] using System; namespace VietJackCsharp { class ExecuteRectangle { static void Main(string[] args) { Console.WriteLine("Tinh dong goi trong C#"); Console.WriteLine("-------------------------------"); //tao doi tuong Rectangle Rectangle r = new Rectangle(); //thiet lap cac thuoc tinh r.length = 4.5; r.width = 3.5; //goi phuong thuc r.Display(); Console.ReadLine(); Console.ReadKey(); } } }[/COLOR][/I] Nếu bạn không sử dụng lệnh Console.ReadKey(); thì chương trình sẽ chạy và kết thúc luôn (nhanh quá đến nỗi bạn không kịp nhìn kết quả). Lệnh này cho phép chúng ta nhìn kết quả một cách rõ ràng hơn. Biên dịch và chạy chương trình C# trên sẽ cho kết quả sau: [CENTER][IMG]https://vietjack.com/csharp/images/tinh-dong-goi.PNG[/IMG] [/CENTER] Trong ví dụ, bạn chú ý rằng hàm thành viên GetArea() không được khai báo với bất kỳ Access Specifier nào. Thì theo mặc định, Access Specifier của một thành viên lớp nếu chúng ta không khai báo là private. [SIZE=5][B]5. Protected Internal Access Specifier trong C#[/B] [/SIZE] Protected Internal Access Specifier trong C# cho phép một lớp ẩn các biến thành viên và các hàm thành viên của nó với các hàm và đối tượng khác, ngoại trừ một lớp con bên trong cùng ứng dụng đó. Điều này cũng được sử dụng trong khi triển khai tính kế thừa trong C#. Trên đây là bài viết về tính đóng gói trong C#. Mời các bạn tìm hiểu thêm các bài viết khác về C# trên trang vnkienthuc.com nhé. [RIGHT]Nguồn: vietjeck.com[/RIGHT] [/QUOTE]
Tên
Mã xác nhận
Gửi trả lời
CÔNG NGHỆ
Công Nghệ Thông Tin
Code
C# và tính bao đóng của nó
Top