2011-08-25 70 views
26

Tôi chỉ cần đi qua một khái niệm không rõ của C# cho tôi Bất cứ ai có thể cho tôi biết mục đích của một tài sản thiết lập nội bộ? Whats là gì? Tôi biết từ khóa nội bộ được sử dụng để làm việc trong một hội đồng.Thuộc tính thiết lập nội bộ trong C# là gì?

Trả lời

48

Nếu bạn có thuộc tính có bộ truy cập bộ bên trong (và bộ nhận công khai) có nghĩa là mã trong hội đồng có thể đọc (nhận) và viết (đặt) thuộc tính, nhưng mã khác chỉ có thể đọc nó.

Bạn có thể tìm thấy thông tin trên bằng cách đọc về internal access modifier, public access modifierproperties.

Ngoài ra, bạn có thể đọc khoảng Restricting Accessor Accessibility.

+2

+1, Ngoài ra tôi có thể thêm vào câu trả lời của bạn rằng tôi đã thấy bộ nội bộ được sử dụng trong hai trường hợp: 1.) để "ẩn" nội dung, có lẽ không phải là cách hay để làm và mitght điểm đến một dòng chảy thiết kế và 2.) mục đích thử nghiệm đơn vị – UrbanEsc

+0

UrbanEsc Tôi đồng ý rằng điều này dường như chỉ đến một lỗ hổng thiết kế, hầu hết thời gian bạn nhìn thấy nó.Tôi chỉ gặp điều này trong một số mã mà tôi đang làm việc, và nó dường như là nguồn gốc của sự phụ thuộc với một lớp khác (nội bộ để nó có thể vượt qua các giới hạn truy cập riêng tư). điều này hơn một cái gì đó rõ ràng hơn nhiều. – Sprague

1

Điều này có nghĩa là thuộc tính chỉ có thể được đặt bằng mã nằm trong cùng một nhóm khi lớp đó khắc phục thuộc tính.

1

Đây là cấu trúc cho phép giá trị của thuộc tính chỉ được đặt bằng mã trong cùng một cụm.

2

Nếu trình thiết lập thuộc tính được đánh dấu bằng công cụ sửa đổi truy cập nội bộ, chỉ các lớp nằm trong assembly mới có thể đặt thuộc tính.

public string MyProperty { get; internal set; } 
9

Properties in C# 2.0

Trong C# 2.0, bạn có thể thiết lập khả năng tiếp cận của nhận và thiết lập.

Mã bên dưới cho biết cách tạo biến riêng với tập hợp nội bộ và nhận công khai. Thuộc tính Giờ bây giờ chỉ có thể được đặt từ mã trong cùng một mô đun (dll), nhưng có thể được truy cập bởi tất cả các mã sử dụng mô-đun (dll) có chứa lớp đó.

// private member variables 
private int hour; 

// create a property 
public int Hour 
{ 
    get { return hour; } 
    internal set { hour = value; } 
} 
7

Giả sử bạn đang thiết kế API để sử dụng bởi các lập trình viên khác. Trong API này, bạn có một đối tượng Foo có một thuộc tính Bar. Bạn không muốn các lập trình viên khác thiết lập giá trị của Bar khi họ tham chiếu đến assembly của bạn, nhưng bạn cần phải tự đặt giá trị từ bên trong API của mình. Đơn giản chỉ cần kê khai tài sản như vậy:

public class Foo 
{ 
    public string Bar { get; internal set; } 
} 
3

cho một tài sản tuyên bố public string MyString {get; internal set;} điều này có nghĩa rằng

  • bạn thể đọc giá trị của tài sản từ bất cứ nơi nào withhin ứng dụng của bạn (public string MyString)
  • nhưng bạn chỉ có thể viết giá trị mới cho bất động sản từ bên trong assembly, trong đó nó được tuyên bố - hoặc từ hội đồng người bạn. (internal set;)
Các vấn đề liên quan