क्या किसी संपत्ति / सदस्य को C # में घोषित प्रकार के रूप में नाम देना खराब है?


25

उदाहरण के लिए, एक वर्ग जैसे:

class Dog { } //never mind that there's nothing in it...

और फिर एक संपत्ति की तरह:

Dog Dog { get; set; }

मुझे बताया गया है कि अगर मैं इसके लिए अधिक कल्पनाशील नाम नहीं ले सकता, तो मुझे इसका उपयोग करना होगा:

Dog DogObject { get; set; }

कैसे इन बेहतर नाम पर कोई विचार?


2
इस आवश्यकता के बारे में आपको बताया गया है कि यह मस्तिष्क-मृत प्रतीत होता है, शायद एक अच्छे दिशानिर्देश के अति-प्रवर्तन के कारण (केवल बेहतर नाम होने पर टाइप नाम का उपयोग न करें)।

2
यह C # में भी संकलित नहीं होगा क्योंकि सदस्य नाम एन्क्लोजिंग प्रकार के समान नहीं हो सकता है।
ली

3
@ ली: मुझे लगता है कि संदर्भ यह है कि संपत्ति दूसरे प्रकार में है। उदा। एक Personवर्ग जिसमें एक Dogसंपत्ति होती है, जिसे कहा जाता हैDog
18

3
मेरा मतलब है, अगर वह वास्तव में एक कुत्ता है, तो उसे इस तरह लेबल करें।
थॉमस एडिंग सेप

1
आपके IDE के सिंटैक्स हाइलाइटिंग के प्रकार और गुण को अलग करना चाहिए। जब आप एक आईडीई का उपयोग नहीं कर रहे हैं, तो आप हमेशा संदर्भ को देख सकते हैं।
साइनाफिश

जवाबों:


22

यह एक बुरा अभ्यास हो सकता है, क्या यह इस तथ्य के लिए नहीं था कि यह पहले से ही स्पष्ट है कि आप अपने कोड के बारे में क्या बात कर रहे हैं, संदर्भ के आधार पर।

Dog = new Dog();

टाइप कंस्ट्रक्टर कौन सा है? कौन सी वस्तु है? उलझन में नहीं? ठीक है, कैसे?

Dog = Dog.Create()?

कौन सी वस्तु है? प्रकार पर स्थिर कारखाना विधि कौन सी है? अभी भी उलझन में नहीं? मैंने ऐसा नहीं सोचा था।

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

Dog = new Some.Namespace.Dog();

किसी भी मामले में, यह केवल स्वचालित गुणों (और शायद एनम) के साथ होना चाहिए, क्योंकि स्थानीय चर नाम हमेशा ऊंट होते हैं, पूरी तरह से अस्पष्टता से बचते हैं।

dog = new Dog();

7
+1। और विकल्प सभी बदतर हैं: "TheDog", "AnyDog", "MyDog", आदि। जब जोड़ने के लिए कुछ भी नहीं है, तो कुछ भी नहीं जोड़ना सबसे अच्छा है।
केविन क्लाइन

मुझे लगता है कि अगर किसी कारण के लिए Dogएक उदाहरण विधि कहा जाता है Create, तो दूसरा भ्रमित हो सकता है , लेकिन आप उस बिंदु पर कुछ बहुत भयानक कोडिंग प्रथाओं में गोताखोरी करेंगे।
केडी तेरागेलिया

40

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

http://blogs.msdn.com/b/ericlippert/archive/2009/07/06/color-color.aspx

इस निर्णय से उत्पन्न होने वाले कुछ दिलचस्प कोने के मामलों के लिए।

किसी भी परिस्थिति में आपको "डॉगऑबजेक्ट" के नाम पर एक संपत्ति का नाम नहीं देना चाहिए ताकि इसे उसके प्रकार के समान न कहा जा सके; यह सीधे रूपरेखा डिजाइन दिशानिर्देशों का खंडन करता है।


यदि संपत्ति प्रकार वह है जिसके उदाहरणों की कोई पहचान नहीं है (उदाहरण के लिए Color), तो ऐसा उपयोग उचित लगता है। मुझे यह इतना पसंद नहीं है, हालांकि, परिवर्तनशील या IDisposableप्रकारों के साथ। क्या "नियंत्रण का Font" राज्य के उन पहलुओं को संदर्भित करता है जो संपत्ति से घिरा होता है, या Fontसंपत्ति पाने वाले द्वारा पहचाने जाने वाले उदाहरण के लिए ?
सुपरकैट

7

इसे कॉल करना पूरी तरह से ठीक है Dogऔर यह वास्तव में Microsoft ने फ्रेमवर्क के नामकरण दिशानिर्देशों में क्या सिफारिश की है :

किसी संपत्ति को उसके प्रकार के समान नाम देने वाला विचार।

उदाहरण के लिए, निम्न गुण सही ढंग से प्राप्त करता है और रंग नामक एक एनम मान सेट करता है, इसलिए संपत्ति का नाम रंग है।

और यहाँ उदाहरण है कि वे उपरोक्त गाइड में उपयोग करते हैं:

public enum Color {...}
public class Control {
    public Color Color { get {...} set {...} }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.