2010-09-26 38 views
34

Trong C++, bạn có thể xác định một phương pháp liên tục như vậy:phương pháp Const trong C#

int func_that_does_not_modify_this(int arg) const {} 

Đặt const vào cuối của hàm ngăn cản bạn vô tình thay đổi bất kỳ thuộc tính nội bộ, và cho phép người gọi biết rằng chức năng này sẽ không sửa đổi đối tượng.

Có khái niệm như thế này trong C# không?

Trả lời

42

Không, không có gì giống như vậy trong C#. Nó đã được nói về rất nhiều, nhưng nó rất khó để làm cho const hoạt động theo cách mà nó có thể kiểm chứng tại thời gian biên dịch, không thể bỏ đi như nó có thể trong C++, và vẫn còn hợp lý dễ sử dụng mà không cần mọi người phải làm cho nó hoàn toàn đúng khi họ thiết kế các lớp học của riêng họ.

Tất nhiên, nếu bạn thiết kế các kiểu của riêng bạn là bất biến (như string) thì tất cả các phương pháp thể hiện trên đó đều có hiệu quả const. Điều này không phải lúc nào cũng thực tế, nhưng đó là một kỹ thuật quan trọng để sử dụng khi thích hợp.

8

Không. Không có gì tương tự trong C#.

Không const & một trong hai.

Như Jon chỉ ra, bạn rõ ràng có thể triển khai phương pháp const, nhưng không có cách nào ngoài tài liệu để cho người gọi biết rằng phương thức là const.

11

Code Contract sẽ cung cấp tính năng như vậy trong tương lai. Hiện tại, bạn có thể đánh dấu một phương thức là [Pure], có nghĩa là nó không có bất kỳ tác dụng phụ nào (tức là không sửa đổi bất kỳ thành viên nào trong nhóm). Thật không may, phiên bản hiện tại của các công cụ không thực thi quy tắc này, vì vậy việc sử dụng thuộc tính đó chỉ dành cho mục đích tài liệu. Tôi khá chắc chắn rằng trong phiên bản tương lai, nó sẽ được thực thi thông qua phân tích tĩnh (tức là tại thời gian biên dịch), hoặc ít nhất đó là những gì tài liệu hướng dẫn gợi ý.

Các câu hỏi liên quan SO: Pure functions in C#

+0

Điều đó sẽ tốt đẹp :) – mpen

Các vấn đề liên quan