2008-09-02 13 views
6

पर वीएसएनईटी डिफ़ॉल्ट डिफ़ॉल्ट दृश्य स्टूडियो सी # में निजी के रूप में नए वर्ग क्यों घोषित करता है? मैं लगभग हमेशा उन्हें सार्वजनिक रूप से बदलता हूं, क्या मैं पागल हूं?निजी वर्ग

+0

दरअसल, कक्षा, संरचना या इंटरफ़ेस के लिए डिफ़ॉल्ट पहुंच स्तर आंतरिक नहीं है, निजी नहीं है। 'आंतरिक उपयोग डिफ़ॉल्ट है यदि कोई एक्सेस संशोधक निर्दिष्ट नहीं है' और 'कक्षाओं और structs की तरह, आंतरिक पहुंच के लिए डिफ़ॉल्ट इंटरफेस' से: [एमएसडीएन] (http://msdn.microsoft.com/en-us/library/ms173121। एएसपीएक्स) – sliderhouserules

उत्तर

8

डिफ़ॉल्ट रूप से निजी पहुंच सी # भाषा विनिर्देशकों के हिस्से पर एक उचित डिजाइन विकल्प की तरह प्रतीत होता है।

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

-1

सी ++, जिस पर सी # व्युत्पन्न हुआ है, निर्दिष्ट है कि डिफ़ॉल्ट वर्ग पहुंच स्तर निजी है। सी # बेहतर या बदतर के लिए आगे बढ़ता है।

+0

डिफ़ॉल्ट आंतरिक है, निजी नहीं है। http://msdn.microsoft.com/en-us/library/ms173121.aspx – sliderhouserules

0

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

करने के लिए "Program Files \ Microsoft Visual Studio 9.0 \ Common7 से अधिक जाएँ:

16

मुझे यकीन है कि ऐसा क्यों है कि करता है, लेकिन यहाँ क्या आप डिफ़ॉल्ट रूप से सार्वजनिक रूप वर्ग बनाने के लिए दृश्य स्टूडियो पाने के लिए आदेश में क्या है नहीं कर रहा हूँ \ आईडीई \ ItemTemplates \ CSharp \ कोड \ 1033 ", आप ज़िप फ़ाइल के अंदर Class.cs बुलाया फ़ाइल को खोलने के लिए एक फ़ाइल Class.zip कहा जाता है, मिल जाएगा, फ़ाइल की सामग्री इस तरह दिखता है:

using System; 
using System.Collections.Generic; 
$if$ ($targetframeworkversion$ == 3.5)using System.Linq; 
$endif$using System.Text; 

namespace $rootnamespace$ 
{ 
    class $safeitemrootname$ 
    { 
    } 
} 

आपको बस कक्षा के नाम से पहले "सार्वजनिक" जोड़ना है। परिणाम इस तरह दिखना चाहिए:

using System; 
using System.Collections.Generic; 
$if$ ($targetframeworkversion$ == 3.5)using System.Linq; 
$endif$using System.Text; 

namespace $rootnamespace$ 
{ 
    public class $safeitemrootname$ 
    { 
    } 
} 

एक आखिरी बात तुम क्या करने की जरूरत है फ्लश सभी टेम्पलेट्स दृश्य स्टूडियो का उपयोग कर रहा है, और उसे उन्हें फिर से लोड कर सकते हैं। इसके लिए आदेश है (इसमें थोड़ी देर लगती है):

devenv /installvstemplates 

और यह डिफ़ॉल्ट रूप से कोई और निजी वर्ग नहीं है। बेशक आप आंतरिक या जो भी चाहें जोड़ सकते हैं।

Source

+0

वाह, मैं वास्तव में क्या देख रहा था! –

-2
सुरक्षा कारणों से

आप कुछ विधियों का खुलासा करना चाहते हैं, न कि आपकी पूरी कक्षा।

0

भले ही आप कक्षा के रूप में सार्वजनिक रूप से चिह्नित हों, फिर भी सदस्य डिफ़ॉल्ट रूप से निजी होते हैं। दूसरे शब्दों में, कक्षा एक ही नामस्थान के बाहर काफी बेकार है। मुझे लगता है कि इसे डिफ़ॉल्ट रूप से सार्वजनिक बनाना इसके बजाए बहुत दूर जा सकता है। कुछ 'आंतरिक' का उपयोग करने का प्रयास करें। इसे के लिए उद्देश्यों के लिए पर्याप्त पहुंच प्रदान करनी चाहिए।

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