2013-07-24 71 views
18

Bạn biết cách bạn có thể có thuộc tính tự động tạo trường sao lưu? Giống như nếu tôi đi:Thêm mã vào C# get/set thuộc tính mà không cần trường sao lưu?

Tôi biết rằng nếu tôi muốn thêm mã để sở hữu mà tôi có để tạo ra các lĩnh vực sao lưu như vậy:

public string someProperty = string.Empty; 
public string SomeProperty 
{ 
    get { return someProperty; } 
    set 
    { 
     someProperty = value; 
     DoSomething(); 
    } 
} 

Về cơ bản, những gì tôi muốn biết là. .. có cách nào để làm điều này nhưng không phải tạo trường sao lưu? Ví dụ tôi có thể sử dụng nó để kích hoạt một số loại sự kiện xảy ra khi một thuộc tính được thiết lập. Tôi đang tìm một cái gì đó như thế này:

public string SomeProperty 
{ 
    get; 
    set { this.OnSomeEvent; } 
} 

Nhưng tôi biết rằng sẽ gây ra một lỗi biên dịch vì get nhu cầu làm khai báo một cơ thể nếu set làm.

Tôi đã nghiên cứu và tôi không thể tìm thấy bất kỳ điều gì, nhưng tôi nghĩ mình nên kiểm tra xem có ai biết không.

Tôi đoán những gì tôi thực sự sau là một số cách để kích hoạt sự kiện khi thuộc tính bị thay đổi nhưng không phải thêm tất cả sự lộn xộn đó. Bất kỳ đề xuất?

+7

Nhập 'propfull' theo sau là tab tab - một cách nhanh chóng để tạo thuộc tính với trường mẫu. – andrewb

+0

Câu hỏi hay. Nếu nó giống như javascript, "điều này" có thể ám chỉ đến thuộc tính do đó là trường sao lưu. – toddmo

Trả lời

16

Câu trả lời đơn giản là không, bạn không thể có cả hai cách. từ msdn:

Trong C# 3.0 và sau, thuộc tính tự động thực hiện làm cho tài sản kê khai ngắn gọn hơn khi không có logic bổ sung là cần thiết trong accessors tài sản.

+0

Đó là những gì tôi nghĩ nhưng tôi không thể tìm thấy bất kỳ đề cập đến trực tuyến. Cám ơn phản hồi của bạn. – ashley

0

Không có giải pháp nào được tích hợp trong khung công tác và bạn không thể sửa đổi các kiểu hiện có thông qua phản ánh (để thêm logic khi chạy). Cách duy nhất để thực hiện điều này có vẻ là lúc biên dịch.

Có một sản phẩm http://www.postsharp.net/ có thể thực hiện việc này (chặn các cuộc gọi thuộc tính/phương thức) và có vẻ như là phiên bản miễn phí.

+0

postsharp là một giải pháp thay thế tuyệt vời, cho phép bạn thực hiện lập trình hướng khía cạnh (AOP). AOP không nhiều về việc giảm sự lộn xộn vì nó là về quản lý các mối quan tâm cắt ngang (hành vi được sử dụng trên một số lượng lớn các yêu cầu nghiệp vụ và không thể bị cô lập) – Claies

+0

Thú vị, tôi chưa bao giờ nghe nói về sản phẩm đó cho đến bây giờ. – ashley

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