C# में प्रॉपर्टी क्लास का एक सदस्य होती है, जो उस क्लास के अंदर मौजूद डेटा तक पहुँच देती है। इसे कॉल करने वाला कोड उस डेटा को सेट कर सकता है या प्राप्त (get) कर सकता है। प्रॉपर्टी या तो ऑटो-इम्प्लीमेंटेड हो सकती है, या उसके पीछे एक बैकिंग फील्ड होता है। इनमें एक set एक्सेसर और/या एक get एक्सेसर होता है। कुछ अन्य भाषाओं में म्यूटेटर लगभग set एक्सेसर जैसा होता है और एक्सेसर लगभग get एक्सेसर जैसा, हालाँकि इन दोनों के सिंटैक्स की बनावट बिल्कुल अलग होती है।
किसी प्रॉपर्टी को सेट करते समय इनपुट वैल्यू की जाँच की जा सकती है, उसे फॉर्मेट किया जा सकता है, या किसी और तरीके से बदला जा सकता है। वास्तव में, क्लास के कोड के लिए उपलब्ध कोई भी प्रोग्रामेटिक काम किया जा सकता है।
इसी तरह, प्रॉपर्टी से डेटा प्राप्त करते समय डेटा की गणना या फॉर्मेटिंग की जा सकती है, और यहाँ भी क्लास के लिए उपलब्ध कोई भी प्रोग्रामेटिक काम किया जा सकता है।
प्रॉपर्टी में भी बाकी क्लास सदस्यों की तरह एक्सेस मॉडिफायर (public, private आदि) होते हैं, लेकिन set एक्सेसर का एक्सेस लेवल get एक्सेसर से स्वतंत्र हो सकता है, और इसका उलटा भी। यह ज़रूरी नहीं कि प्रॉपर्टी में दोनों एक्सेसर हों; उसमें सिर्फ एक भी हो सकता है (या get, या set)।
प्रॉपर्टी लिखने के लिए बुनियादी सिंटैक्स दो रूपों में हो सकता है:
private int myField;
public int MyProperty
{
get { return myField; }
set { myField = value; }
}
public int MyProperty { get; private set; } = 42;
इनिशियलाइज़ेशन ज़रूरी नहीं है।
इस अभ्यास में आप किलोग्राम को इकाई मानकर एक वेइंग मशीन का मॉडल बनाएँगे।
आपके सामने छह काम हैं, और हर काम में आपको एक या उससे अधिक प्रॉपर्टी लागू करनी है:
अलग-अलग ज़रूरतों को पूरा करने के लिए हम हर वेइंग मशीन को उसकी अपनी प्रिसिज़न देने की सुविधा देते हैं (प्रिसिज़न यानी दशमलव चिह्न के बाद अंकों की संख्या)।
WeighingMachine क्लास में एक सिर्फ पढ़ने वाली Precision प्रॉपर्टी लागू कीजिए, जो कंस्ट्रक्टर के precision आर्गुमेंट से सेट होती है:
var wm = new WeighingMachine(precision: 3);
// => wm.Precision == 3
WeighingMachine.Weight प्रॉपर्टी को ऐसे लागू कीजिए कि वज़न पढ़ा भी जा सके और सेट भी किया जा सके:
var wm = new WeighingMachine(precision: 3);
wm.Weight = 60.5;
// => wm.Weight == 60.5
साफ है, किसी व्यक्ति का वज़न ऋणात्मक नहीं हो सकता।
WeighingMachine.Weight प्रॉपर्टी में वैलिडेशन जोड़िए, ताकि उसमें ऋणात्मक वज़न सेट करने की कोशिश करने पर ArgumentOutOfRangeException फेंका जाए:
var wm = new WeighingMachine(precision: 3);
wm.Weight = -10; // Throws an ArgumentOutOfRangeException
टेयर एडजस्टमेंट की वैल्यू कुछ भी हो सकती है, ऋणात्मक भी, या ऐसी भी जिससे प्रदर्शित होने वाला वज़न ऋणात्मक हो जाए।
WeighingMachine.TareAdjustment प्रॉपर्टी लागू कीजिए, ताकि टेयर एडजस्टमेंट सेट किया जा सके:
var wm = new WeighingMachine(precision: 3);
wm.TareAdjustment = -10.6;
// => wm.TareAdjustment == -10.6
पूरी तरह जाँच करने पर पता चला कि निर्माण की किसी खामी के कारण हर वेइंग मशीन वज़न को 5 अधिक बताती है।
WeighingMachine.TareAdjustment प्रॉपर्टी की डिफॉल्ट वैल्यू 5 कर दीजिए।
var wm = new WeighingMachine(precision: 3);
// => wm.TareAdjustment == 5.0
WeighingMachine.DisplayWeight प्रॉपर्टी लागू कीजिए। यह एक स्ट्रिंग लौटाती है जिसमें टेयर एडजस्टमेंट लगाने के बाद का वज़न, सही प्रिसिज़न के साथ और इकाई जोड़कर दिखाया जाता है।
ध्यान दीजिए:
display-weight = input-weight - tare-adjustment
var wm = new WeighingMachine(precision: 3);
wm.Weight = 60.567;
wm.TareAdjustment = 10;
// => wm.DisplayWeight == "50.567 kg"
Exercism पर साइन अप कीजिए और C# को 62 कॉन्सेप्ट178 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।