मैं सिंगलटन वस्तु 'सेवा' और दो तरीकों से प्रारंभ और इसे जारी करने के लिए है:'डबल-चेक-लॉकिंग' के लिए अभिव्यक्ति हमेशा सत्य क्यों होती है?
public class BaseService
{
protected static readonly object StaticLockObject = new object();
}
public abstract class WebServiceBase<TService> : BaseService
where TService : System.Web.Services.Protocols.SoapHttpClientProtocol, new()
{
protected static void EnsureServiceIsOpened()
{
if (Service == null)
{
lock (StaticLockObject)
{
if (Service == null)
{
Service = new TService();
}
}
}
}
protected static void EnsureServiceIsClosed()
{
if (Service != null)
{
lock (StaticLockObject)
{
if (Service != null) // Why expression is always true
{
Service.Dispose();
Service = null;
}
}
}
}
टिप्पणी ReSharper (मैं संस्करण 5.1 का उपयोग करें) एक उल्लेख चेतावनी प्रदर्शित करता है के साथ लाइन के लिए ...
प्रश्न 1: क्यों?
प्रश्न 2: यह 'EnsureServiceIsOpened' विधि में "समान" संदेश क्यों प्रदर्शित नहीं करता है?
धन्यवाद।
यह अपने कोड एक भी लड़ी एप्लिकेशन को तोड़ने नहीं होगा - क्यों यह एक * चेतावनी * मुझे पहेली। :/ – mayu
क्योंकि ऐसा हो सकता है। कोड विश्लेषण केवल इतना ही जा सकता है - और यही कारण है कि यह चेतावनी प्रकट होती है। – Femaref
मुझे रिशेर्पर द्वारा दिखाए जाने में कोई समस्या नहीं है, मुझे नहीं लगता कि यह एक चेतावनी होनी चाहिए। :) – mayu