2010-05-28 9 views
11

Tôi tự hỏi rằng thuộc tính lỗi thời được kiểm tra tại thời gian chạy chỉ?Thuộc tính Lỗi thời chỉ được kiểm tra tại thời gian biên dịch?

Hãy nghĩ rằng bạn có hai hội đồng. Assembly A sử dụng một phương thức từ Assembly B. Sau đó chúng ta đánh dấu phương thức trong Assembly B là lỗi thời gây ra lỗi thời gian biên dịch khi biên dịch A.

Không có vấn đề gì cho đến nay nhưng câu hỏi là liệu hội đồng cũ A có tiếp tục làm việc với Assembly B mới hay không? Cảm ơn

Trả lời

13

Nó phụ thuộc vào những gì bạn đang làm. Thuộc tính [Obsolete]chủ yếu là để sử dụng tại thời gian biên dịch, nhưng lưu ý rằng một số phần của thời gian chạy có hành vi khác nhau khi có mặt (xem bên dưới). Nó có thể gây ra sự cố, ngay cả với mã hiện tại không được xây dựng lại, vì vậy chúng tôi phải kết luận rằng NO, [Obsolete] không chỉ được chọn lúc biên dịch.

Ví dụ, đoạn code dưới đây sẽ viết Foo nhưng không Bar:

using System; 
using System.Xml.Serialization; 
public class Data 
{ 
    public int Foo { get; set; } 
    [Obsolete] public int Bar {get;set;} 

    static void Main() 
    { 
     var data = new Data { Foo = 1, Bar = 2 }; 
     new XmlSerializer(data.GetType()).Serialize(Console.Out, data); 
    } 
} 

(XmlSerializer là một thời gian chạy quá - không nằm trong trình biên dịch)

+0

Cảm ơn phản hồi chi tiết của bạn Marc. – mkus

+0

Tôi gặp vấn đề với điều này. Tôi đã đánh dấu một số mục trong một enum với [Obsolete] trong một dịch vụ web. Khách hàng tiêu thụ dịch vụ sau đó sẽ không còn nhận được các mục enum đó trong thời gian chạy. Nhưng các tài liệu tham khảo web vẫn sẽ bao gồm chúng. Điều này có vẻ như một lỗi trong việc tuần tự hóa với tôi - hoặc một quyết định thiết kế kém nhất là tốt nhất. Cho ý nghĩa thời gian chạy cờ này hoàn toàn đánh bại mục đích của nó theo ý kiến ​​của tôi. – LOAS

6

Xây dựng một hội đồng sử dụng phương pháp từ một hội đồng khác được đánh dấu là Lỗi thời gây ra cảnh báo thời gian biên dịch (Trừ khi bạn bật 'cảnh báo hiển thị là lỗi').

Không có gì ngăn bạn sử dụng phương pháp này trong khi nó vẫn còn trong hội đồng được tham chiếu. Thuộc tính Obsolete là cách để các nhà phát triển thư viện cho phép những người sử dụng thư viện biết rằng họ nên tìm cách sử dụng một phương pháp khác để đạt được những gì họ cần.

Để trả lời câu hỏi của bạn, vâng, một lắp ráp Một cũ sẽ tiếp tục làm việc với một hội đồng B. mới (cung cấp phiên bản lắp ráp vẫn giữ nguyên)

+0

1 đánh bại tôi vào nó. –

+2

Điều đó không được bảo đảm trong mọi trường hợp; xem trả lời của tôi cho lý do tại sao ... –

+0

'[Lỗi thời (" nitpicking ", true)]' sẽ cung cấp cho bạn một lỗi tại thời gian biên dịch nếu được tham chiếu trực tiếp ngay cả khi bạn có cảnh báo _display khi error_ bị vô hiệu hóa. – mbx