Tôi đang sử dụng .NET 4.5 trong trình bổ sung VSTO cho triển vọng 2013. Tôi đang gặp một số sự cố khi nắm bắt toàn bộ thuộc tính và trình truy cập. Tự động thực hiện accessors mà tôi giả định là khi bạn chỉ cần viết get; bộ; thay vì nhận được {// code}, v.v. cũng khiến tôi gặp rắc rối. Tôi có một từ điển tôi sử dụng trong nội bộ lớp học của mình. Đây là mã của tôi:Thuộc tính và tự động triển khai
private Dictionary<string, string> clientDict { get; set; }
private Dictionary<string, string> clientHistoryDict { get; set; }
sau đó vào lúc:
clientDict = new Dictionary<string, string>();
clientHistoryDict = new Dictionary<string, string>();
Tôi đang sử dụng tên giống như các thuộc tính trong các mã sau này, trong cùng một lớp.
Tôi chưa bao giờ thực sự viết:
private Dictionary<string, string> _clientDict; // etc.
để tạo ra các biến tôi chỉ được sử dụng tài sản trực tiếp.
Tôi đã thử thay đổi mã của mình để thực hiện việc này và tôi đã gặp một số vấn đề và nhận ra sự hiểu biết về các thuộc tính của tôi hơi lộn xộn một chút.
Dưới đây là một số câu hỏi tôi cần được làm rõ rằng dường như tôi không thể tìm thấy câu trả lời đúng.
Trước tiên, có lý do gì để sử dụng tài sản riêng tư không? Từ điển của tôi không bao giờ được truy cập bên ngoài lớp học hoặc trong bất kỳ lớp học có nguồn gốc nào như vậy là có một lý do để thậm chí sử dụng tài sản? Tôi không sử dụng bất kỳ xác nhận đặc biệt hoặc bất cứ điều gì trong setter hoặc bất cứ điều gì như thế.
Thứ hai, khi tôi cố thay đổi mã của mình để sử dụng biến và sau đó truy cập chúng thông qua các thuộc tính như ví dụ điển hình của bạn, tôi gặp sự cố. Tôi tìm thấy một ví dụ nơi getter được thiết lập để return _clientDict
, nhưng setter chỉ là Nó đã cho tôi lỗi: rằng tôi phải cung cấp cho thiết lập một cơ thể vì nó không trừu tượng hoặc một phần. Tại sao nó không tự động thực hiện setter cho tôi trong trường hợp này?
Cuối cùng, khi tôi gọi mới trên thuộc tính trong cùng một lớp mà nó được khai báo, sự khác nhau giữa việc làm điều đó với thuộc tính và biến bình thường cùng loại là gì? Do các thuộc tính khác nhau ở tất cả các biến trong trường hợp đó? Có thực tế xấu để sử dụng các thuộc tính theo cách này khi nó cần được thực hiện với các biến riêng tư không?
Đây có thể là một số câu hỏi sai lầm nhưng tôi không thể tìm thấy bất kỳ địa điểm nào khác có thông tin để giúp tôi hiểu những khác biệt này. Tôi đã chơi đùa với các tài sản để thử và tìm ra tất cả những điều này nhưng tôi có thể sử dụng để hỗ trợ tôi.
Trợ giúp rất lớn cảm ơn rất nhiều, chỉ cần làm rõ một số? Những gì bạn có ý nghĩa của các lĩnh vực không thể có specifiers truy cập? Biến thành viên riêng tư có phải là một ví dụ về điều này không? Tôi nghĩ rằng tôi đang thiếu những gì bạn có ý nghĩa của lĩnh vực. – shenk
Đối số cho các thuộc tính riêng là tiềm năng cho sự thay đổi trong tương lai. Mặc dù bạn không có logic xác nhận ngay bây giờ, bạn có thể trong tương lai và đã có một thuộc tính cung cấp cho bạn một nơi duy nhất để thay đổi logic này, thay vì mọi phép gán diễn ra trong lớp của bạn, làm cho các biến thể lớp của bạn dễ bảo trì hơn. Nó có thể không phải là một đối số * tuyệt vời *, đặc biệt là trong mọi trường hợp, nhưng nó * có thể * giúp gói gọn một số loại biến động. –
@shenk Một tài sản có thể làm điều này: 'public string Foo {get; bộ bảo vệ; } ', có nghĩa là chỉ các kiểu dẫn xuất mới có thể đặt giá trị' Foo'. Một lĩnh vực không thể làm điều đó. –