2010-05-28 22 views
11

Eski modelin sadece çalışma zamanında mı kontrol edildiğini merak ediyorum.Eski özellikler sadece Derleme zamanında kontrol ediliyor mu?

İki meclisiniz olduğunu düşünün. Montaj A, Montaj B'den bir yöntem kullanır. Bundan sonra, montaj B'yi derlerken derleme zamanı hatası oluşturan derleme B'de yöntemi işaretleriz.

Şimdiye kadar sorun yok, ancak sorun eski montaj A'nın devam edip etmediğidir. Yeni Meclis B ile çalışmak veya değil? Teşekkürler

cevap

13

Size ne yaptığını bağlıdır (derleme sürüm sağlayarak aynı kalır). [Obsolete] özniteliği, derleme zamanında kullanılmak üzere öncelikle'dur, ancak çalışma zamanının bazı bölümlerinin var olduğunda farklı davranışlara sahip olduğunu unutmayın (aşağıya bakın). , nedeninin, yeniden oluşturulmayan mevcut kodlarda bile sorunlara neden olabileceğinden, NO, [Obsolete] yalnızca derleme zamanında kontrol edilmediği sonucuna varmalıyız.

+0

Detaylı yanıtınız için teşekkürler Marc. – mkus

+0

Bunun ile ilgili problemler yaşadım. Bir web hizmetinde [Eskimiş] ile bir girişte bazı girişler işaretlemiştim. Hizmeti tüketen istemciler artık bu enum girişlerini çalışma zamanında almayacaktı. Ancak web referansları yine de bunları içerecektir. Bu benim için serileştirmede bir hata gibi görünüyor - ya da en iyi ihtimalle kötü bir tasarım kararı. Bu bayrak çalışma zamanı anlamını vermek, fikrimi tamamen ortadan kaldırır. – LOAS

6

Başka bir sistemden eskimiş olarak işaretlenmiş bir yöntem kullanan bir derleme oluşturmak derleme zamanı uyarısına neden olur ('Hata olarak' uyarıları etkinleştir 'etkin değilse).

Başvurulan derlemede kalırken, bu yöntemi kullanarak sizi durduran hiçbir şey yoktur. Obsolete özniteliği, kütüphane geliştiricilerin kütüphaneyi kullanan kişilerin ihtiyaç duydukları şeyi elde etmek için farklı bir yöntem kullanmaları gerektiğini bilmelerini sağlamanın bir yolu olarak var.

sorunuza gelince, evet, eski bir montaj A yeni bir montaj B ile çalışmaya devam edeceğiz

+0

1 Beni ona yendi -

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); } } 

(derleyici parçası değil XmlSerializer de bir çalışma zamanı olduğunu):

Örneğin, aşağıdaki kod Foo ancak Bar yazacak. –

+2

Her durumda garanti edilmez; cevabımı görmek için neden ... –

+0

'[Eski (" nitpicking ", true)]' hatalar olarak _display uyarıları varsa bile doğrudan başvurulan derleme zamanında bir hata vermelidir. – mbx

İlgili konular