Tôi không thể tìm thấy "trường" được liệt kê dưới dạng từ khóa C# ở bất kỳ đâu. Có ai biết nền tảng về điều này không?Tại sao tôi cần "trường": trong tuyên bố thuộc tính của tôi "[field: NonSerialized]"?
Trả lời
Các trình biên dịch C# thường không gặp khó khăn trong việc tìm ra phần nào của khai báo mà thuộc tính áp dụng. Tôi có thể nghĩ đến ba trường hợp bạn có thể sử dụng nó:
- Thuộc tính áp dụng cho lắp ráp. Rất dễ thấy trong AssemblyInfo.cs
- Thuộc tính được áp dụng cho giá trị trả lại của khai báo P/Invoke, [return: MarshalAs]
- Có thuộc tính áp dụng cho biến số sao lưu của thuộc tính hoặc sự kiện không có người truy cập. Trường hợp của bạn.
Các NonSerializedAttribute chỉ áp dụng cho các lĩnh vực, bạn có thể sử dụng nó như sau:
[NonSerialized]
public string myString;
và thuộc tính ... –
Không có trường nào. –
Tôi đã sửa. –
này là cần thiết, ví dụ, nếu bạn đang đánh dấu một sự kiện như phi serializable. Nó chỉ định mục tiêu mà thuộc tính áp dụng cho.
Đó là một phần của cú pháp mục tiêu thuộc tính. Từ specification:
attribute-target:
field
event
method
param
property
return
type
Xem thêm tài liệu cho NonSerializedAttribute
:
Để áp dụng các lớp
NonSerializedAttribute
tới một sự kiện, thiết lập các vị trí thuộc tính đến lĩnh vực, như trong C# mã sau.
[field:NonSerializedAttribute()]
public event ChangedEventHandler Changed;
Vâng, bạn không thể sắp xếp một sự kiện, và NonSerializedAttribute chỉ áp dụng cho các trường, vì vậy tôi không hiểu [field: NonSerializedAttribute()] làm gì, tôi cũng ngạc nhiên khi nó biên dịch. –
Vấn đề là các đối tượng đăng ký sự kiện sẽ được coi là một phần của đồ thị đối tượng và được tuần tự hóa khi đối tượng chứa sự kiện được đăng. Để ngăn không cho chúng được tuần tự hóa, bạn phải phân bổ sự kiện bằng 'NonSerializedAttribute'.Nhưng vì 'NonSerializedAttribute' chỉ áp dụng cho các trường, bạn phải đánh dấu nó bằng trường' target' đích thuộc tính. – jason
Yuriy, tôi tin rằng các đại biểu được biên dịch thành các lớp, trong trường hợp này, khi nó được tuần tự hóa, họ sẽ tuần tự hóa với danh sách yêu cầu của họ. Trong trường hợp này, bạn cần đặt nó là [NonSerialized], tuy nhiên nó ném một lỗi biên dịch, vì vậy bạn cần phải xác định trường: NonSerialized. Tôi nghĩ rằng họ cố định nó trong NET 3.5. Tuy nhiên –
này có nghĩa là để cho phép bạn thiết lập NonSerialized thuộc tính trên các lĩnh vực, điều này rất hữu ích trong serializing sự kiện.
Ví dụ này sẽ cung cấp cho bạn một lỗi biên dịch
[NonSerialized]
public event SomeEventHandler SomeEvent;
Để khắc phục điều này, bạn phải sử dụng field:
[field:NonSerialized]
public event SomeEventHandler SomeEvent;
Thông tin thêm về điều này ở đây - Delegates and Serialization
Nhưng bạn đánh dấu nó là NonSerialized, và các sự kiện không thể được tuần tự hóa. –
Yuriy, tôi tin vào các sự kiện .NET 3.0/đại biểu đã được tuần tự hóa thành các lớp, vì vậy bạn phải chỉ định chúng là NonSerialized –
Yuriy, hãy xem liên kết sau http://msdn.microsoft.com/en-us/ magazine/cc163902.aspx # S1 –
- 1. Tại sao {{}} không hoạt động trong thuộc tính src? Tại sao tôi cần ngSrc?
- 2. Tại sao tôi cần sử dụng ngắt?
- 3. Tại sao biến toàn cầu của tôi bị che khuất trước tuyên bố địa phương?
- 4. Tại sao vòng lặp của tôi không hoạt động trên các thuộc tính Javascript của tôi?
- 5. Tôi có thể thêm tuyên bố thể hiện trong GHCi
- 6. Tuyên bố thuộc tính lớp: riêng tư và công khai
- 7. Tại sao tôi cần thuộc tính VirtualPath cho tác vụ AspNetCompiler
- 8. Đặt hai thuộc tính bằng nhau trong tuyên bố
- 9. Tại sao tôi cần truyền tự id?
- 10. JSTL if-tuyên bố bên trong HTML thuộc tính
- 11. Tại sao tôi cần "lưu trữ": "có" trong elasticsearch?
- 12. Tại sao không có tuyên bố so sánh trong javascript 'if ... else ...' tuyên bố này
- 13. Tuyên bố CASres Postgresql - tôi có thể sử dụng giá trị trả về của CASE trong SELECT của tôi không?
- 14. Tại sao-force_load không còn cần thiết cho phụ thuộc ba20 của tôi trong XCode 4.2?
- 15. Trong C tại sao bạn cần một tuyên bố sau một nhãn goto?
- 16. Tại sao thuộc tính $ scope của tôi tiếp tục đặt lại trong ứng dụng AngularJS của tôi?
- 17. Tại sao chương trình của tôi gặp sự cố tại bảng sao kê trả lại?
- 18. Tại sao tôi không thể đặt một tuyên bố biến trong phần thử nghiệm của một vòng lặp while?
- 19. Tại sao tôi cần cả điểm cuối mex và httpGetEnable?
- 20. Tuyên bố trường hợp Bash
- 21. tuyên bố một trường hợp const của một lớp
- 22. Tại sao tôi cần Giao diện?
- 23. Tại sao không phải thuộc tính thiết kế của tôi được tuần tự hóa trong ASPX
- 24. Tại sao XamlReader.Load không thể nhận ra thuộc tính đính kèm của tôi trong Silverlight 4?
- 25. Tại sao tôi sử dụng dấu ngoặc trong thuộc tính tên của phần tử nhập?
- 26. Tại sao tôi không thể đặt thuộc tính của biến lặp trong vòng lặp foreach?
- 27. Tuyên bố về trường hợp trong Slim
- 28. Tại sao thuộc tính ComponentCount của TGroupBox của tôi trả về 0?
- 29. Tại sao tôi cần chuyển đổi?
- 30. Sử dụng <T> trong thuộc tính của lớp tuyên bố trong C#
Bạn có thể đăng thêm một chút mã không? Bạn đang cố tạo thuộc tính mới ở đâu, hoặc bạn đang áp dụng thuộc tính ở đâu đó. Thêm bối cảnh sẽ giúp đỡ. – Nick
Tôi quên mất những điều đó. Tôi đã cập nhật danh sách các từ khóa C# để bao gồm chúng. Cảm ơn! Xem http://blogs.msdn.com/ericlippert/archive/2009/05/11/reserved-and-contextual-keywords.aspx để biết chi tiết. –