में अपरिवर्तनीय संरचना लिखने का सबसे छोटा तरीका अक्सर मुझे छोटे अपरिवर्तनीय डेटा संरचनाओं की आवश्यकता होती है। अन्य लोग शायद इन मामलों में टुपल्स का उपयोग करेंगे, लेकिन मैं वास्तव में नापसंद करता हूं कि टुपल्स अच्छी तरह से नहीं पढ़ते हैं और इतना अर्थ व्यक्त नहीं करते हैं। Value2
int
मुझे कुछ भी नहीं बताता है।सी #
एक उदाहरण दो गुणों के संयोजन के लिए एक लुकअप टेबल (शब्दकोश) बना रहा होगा, यानी Name
और Rating
।
public struct Key
{
public string Name { get; private set; }
public int Rating { get; private set; }
public LolCat(string name, int rating) : this()
{
Name = name;
Rating = rating;
}
}
// useage
var key = new Key("MonorailCat", 5);
मेरी राय में वहाँ अभी भी यहाँ में'वाक्यात्मक वसा' का एक बहुत है कि मैं चाहते हैं:
इन मामलों है कि मैं के बारे में पता करने के लिए एक अपरिवर्तनीय struct बनाने के लिए सबसे छोटा रास्ता यह है छुटकारा पाना। जब मैं सिर्फ फ़ील्ड का खुलासा करता हूं तो मैं इसे और अधिक पठनीय बना सकता हूं।
public struct Key
{
public string Name;
public int Rating;
}
// useage
var key = new Key { Name = "MonorailCat", Rating = 5 };
मुझे वास्तव में इसका वाक्यविन्यास पसंद है, क्योंकि वहां कोई भी वाक्य रचनात्मक वसा नहीं है। बड़ा नुकसान यह है कि यह अपरिवर्तनीय नहीं है, इसके सभी खतरों के साथ।
आदर्श मामले में मैं सिर्फ इस बात के लिए एक विशेष प्रकार की तरह, परिभाषा के वास्तविक न्यूनतम के साथ, करना चाहते हैं:
public immutable struct Key
{
string Name;
int Rating;
}
// useage (needs compiler magic)
var key = new Key(Name: "MonorailCat", Rating: 5);
प्रश्न
वहाँ एक वास्तविक दुनिया समाधान है एक बहुत ही सरल अपरिवर्तनीय संरचना के लिए सिंटैक्टिक वसा की मात्रा को कम करने के लिए नीचे के उदाहरण के करीब कुछ?
इस मामले में कक्षा का उपयोग क्यों नहीं करते? – Kao
गुणों को 'readonly' फ़ील्ड के रूप में क्यों न उजागर करें? आप कम से कम '{get; निजी सेट;} '(और आपको अभी भी निर्माता की आवश्यकता होगी)। – casperOne