2009-10-31 11 views

उत्तर

14

शायद क्योंकि यह एक छोटी, सरल और अपरिवर्तनीय डेटा संरचना के रूप में देखा गया था, जो एक पूर्णांक या दशमलव की तरह था। इन शर्तों के तहत इसे एक संरचना बनाना एक डेटटाइम का उपयोग बहुत कुशल बनाते हैं। यदि इसे कक्षा बना दिया गया था, तो यह दक्षता लाभ खो गया होता क्योंकि हर बार जब आप एक नया डेटटाइम बनाते हैं तो स्मृति आवंटन की आवश्यकता होती है।

इसके अलावा, आप डेटटाइम के कितने संस्करण रूपों के साथ आ सकते हैं? (आपके मन में मौजूद सभी टूस्टिंग कार्यान्वयन को अनदेखा करना।) यह बिल्कुल एक प्रकार नहीं है जो बहुरूपता को आमंत्रित करता है।

ध्यान दें कि आपके डेटटाइम के लिए एक अलग स्वरूपण रणनीति का उपयोग करने के लिए, जैसा कि मुझे लगता है कि आप चाहते हैं, तो आप ToString का उपयोग करने के बजाय फ़ॉर्मेट करने के लिए एक अलग तरीके से बेहतर तरीके से देखेंगे। यदि आप MSDN में ICustomFormatter इंटरफ़ेस देखते हैं, तो आप देखेंगे कि आप स्ट्रिंग में कैसे प्लग कर सकते हैं।किसी मौजूदा प्रकार को सब्सक्राइब किए बिना फ़ॉर्मेटिंग को ओवरराइड करने के लिए पाइपलाइन प्रारूपित करें।

10

क्योंकि यह एक बिंदु है। इसमें डेटा के कई टुकड़े नहीं हैं। हुड के तहत यह एक लंबे समय से प्रतिनिधित्व किया जाता है।

+0

क्यों downvotes की जरूरत नहीं होगी जाँच ToString() विधि overide की जरूरत नहीं है? मैंने अपने मूल प्रश्न का उत्तर दिया। –

+0

मैंने वोट कम नहीं किया है, लेकिन आपके उत्तर से यह है कि संरचनाओं में हमेशा एक "डेटा का टुकड़ा" होता है और यही कारण है कि डेटटाइम संरचना है। आपने संरचनाओं और वर्गों के बीच प्रदर्शन भिन्नता के बारे में कुछ नहीं कहा, जो मुझे लगता है, प्रश्न के उत्तर में शामिल किया जाना चाहिए। – Kamarey

5

यदि आप सिस्टम कक्षाओं और structs के बारे में और जानना चाहते हैं, तो मुफ्त .NET परावर्तक डाउनलोड करें (http://www.red-gate.com/products/reflector/)।

वैसे भी, यदि आप डेटटाइम को स्वरूपित करने के तरीके को ओवरराइड करना चाहते हैं, तो अपना खुद का IFormatProvider प्रदान करें। DetTimeFormatInfo को कार्यान्वित करने के तरीके के बारे में जानने के लिए .NET परावर्तक का उपयोग करें, और फिर अपना स्वयं का कार्यान्वयन करें।

13

आप इस के लिए एक्सटेंशन के तरीके का उपयोग कर सकते हैं: प्रचार विस्तार:

public static class DateTimeExtensions 
{ 
    public static string ToStringFormatted(this DateTime date) 
    { 
     return date.ToString("{d}"); 
    } 
} 

उपयोग विस्तार:

using DateTimeExtensions; 
... 
var d = new DateTime(); 
System.Diagnostics.Debug.WriteLine(d.ToStringFormatted()); 

इस तरह आप सरल अपनी खुद की विधि लागू कर सकते हैं DATETIME को इस्तेमाल किया thats। इस तरह से आप आसानी से समाधान के भीतर हर जगह इस्तेमाल किया जा सकता है। केवल आपको जो करना है वह नामस्थान का उपयोग कर रहा है।

रेफरी: Extension Methods (c#)

+9

हां, लेकिन कृपया इसे "ToString2" नाम न दें! :) –

+1

निश्चित रूप से, यह सिर्फ एक उदाहरण है ...;) –

5

सिर्फ इसलिए कि यह एक struct है (या तो भी यह एक सील बंद वर्ग के थे), मतलब नहीं है कि यह है कि यह सड़क के अंत है। आप विरासत की बजाय composition के साथ इस समस्या को हल कर सकते हैं। यहाँ 'objectifying' दिनांक समय वर्ग की एक उदाहरण है:

public class MyDateTime 
{ 
    DateTime? value; 

    public MyDateTime() 
    { 
     this.Value = DateTime.Now; 
    } 

    public MyDateTime(DateTime? dateTime) 
    { 
     this.Value = dateTime; 
    } 

    public override String ToString() 
    { 
     if (this.Value != null) 
     { 
      return this.Value.Value.Month.ToString() + " my favorite time of the year"; 
     } 

     return null; 
    } 

    public System.DateTime? Value 
    { 
     get { return this.value; } 
     set { this.value = value; } 
    } 
} 
2
  • दिनांक समय एक छोटे आकार की है। इसलिए इसके लिए ढेर पर स्मृति आवंटित करना कुशल नहीं है।

  • असाइनमेंट पर इसकी प्रतिलिपि बनाने के लिए तार्किक है, उसी वस्तु का संदर्भ नहीं बनाते, खासकर जब यह अपरिवर्तनीय है। इस पर ऑपरेशन के लिए भी यही सच है (Add, Substract इत्यादि)

  • इसे इसी COM संरचना में परिवर्तनीय होना था।

यदि आप कस्टम स्वरूपण चाहते हैं तो आप इसे लागू कर सकते हैं जैसे कि यह here दिखाया गया है।

3

मुझे विश्वास है कि यह एक संरचना है क्योंकि structs मूल्य प्रकार हैं और कक्षा संदर्भ प्रकार हैं। डेटटाइम में वास्तविक डेटा एक लंबा लंबा पूर्णांक है। यदि यह एक वर्ग था, हर बार जब आप एक नई वस्तु बनाते थे, तो 8 बाइट ढेर पर आवंटित किए जाएंगे और पॉइंटर के लिए स्टैक पर 8 बाइट आवंटित किए जाएंगे। तो डेटटाइम को एक स्ट्रक्चर बनाकर, यह आधे में मेमोरी आवश्यकताओं को प्रभावी ढंग से घटा देता है।

आप this question में अधिक जानकारी प्राप्त कर सकते हैं।

+0

शायद प्लस प्रदर्शन चिंता – Timeless

2

तुम बस पैटर्न here आप वास्तव में दूसरों :)

अधिक विस्तृत पोस्ट here

संबंधित मुद्दे