2012-03-27 17 views
6

हमें सुरक्षा उद्देश्यों के लिए स्थिर तरीकों से कक्षा को "सुरक्षित" करने की आवश्यकता है। हम सदस्य को स्थिर बनाने के लिए कोडिंग टूल के सुझावों के बाद नौसिखिया देव नहीं चाहते हैं क्योंकि हमें इस वर्ग तक पहुंच नियंत्रित करने के लिए पासवर्ड के साथ एक कन्स्ट्रक्टर का उपयोग करने की आवश्यकता है।सी # में स्थापित करने के लिए कक्षा की आवश्यकता है?

क्या कोई स्थिर सदस्य होने से रोकने के लिए सी # में .NET कक्षा की सुरक्षा करने का कोई तरीका है?

क्या ऐसी सुविधा, यदि उपलब्ध नहीं है, तो .NET के भविष्य के संस्करण के लिए सार्थक हो?

धन्यवाद।

+10

ऐसा लगता है कि आपके उपकरण उपयोगकर्ता के लिए ज़िम्मेदार होने के लिए कह रहे हैं। एपीआई का उचित तरीके से उपयोग करने के तरीके पर अपने देवताओं को प्रशिक्षित क्यों न करें? – rossipedia

+2

मैं वास्तव में स्थिर तरीकों को खत्म करने के तर्क को सुनना चाहता हूं। क्या आप साझा कर सकते हैं, कृपया? –

+10

न्यूबी देव बनाम देवता तत्काल/विरासत को प्रतिबंधित करने के लिए पासवर्ड के साथ रचनाकार बनाते हैं? वाह, और यह कोई सार्थक विशेषता नहीं है – meandmycode

उत्तर

8

आप कस्टम नियम लागू करने के लिए शायद StyleCop का उपयोग कर सकते हैं। हालांकि, इसे एक बिल्ड एक्शन के रूप में लागू करना होगा।

वैकल्पिक रूप से, आप बाइनरी का विश्लेषण करने के लिए FxCop का उपयोग कर सकते हैं।

3

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

मैं इस तरह की सुविधा के लिए कोई अच्छा उपयोग नहीं कर सकता। यह कार्यान्वयन में से एक के बजाय संचार की एक समस्या है।

अपने मामले में, आप अपनी संरक्षित कार्यक्षमता को एक सार बेस क्लास में रख सकते हैं, और यह देखने के लिए चेक चला सकते हैं कि उपयोगकर्ता किसी संरक्षित फ़ंक्शन को करने से पहले अधिकृत है या नहीं।

+0

स्थिर विधियों की उपस्थिति के लिए जांच करने वाला एक स्थिर कन्स्ट्रक्टर जोड़ना आसान है। – CodesInChaos

0

मुझे लगता है कि एक सीलबंद वर्ग पर्याप्त होगा, हालांकि मूल वर्ग घोषणा में स्थिर सदस्यों की अनुमति है। मुझे लगता है कि व्युत्पन्न कक्षाएं और स्थिर सदस्यों की अनुमति नहीं देगी।

9

करने के लिए सबसे आसान बात यह है कि अपने निर्माण सर्वर पर FxCop सेट अप करें और स्थिर सदस्यों की जांच के लिए कस्टम FxCop नियम लिखें।

This question में कस्टम FxCop नियम लिखने के बारे में विवरण है।


वैकल्पिक रूप से, के रूप में SimpleCoder ने कहा, आप StyleCop का उपयोग स्रोत कोड पर नियम लागू करने के लिए कर सकते हैं।

This page वर्णन करता है कि स्टाइलकॉप को msbuild के साथ कैसे सेट अप करें।

0

मुझे यह मानना ​​है कि मैंने कभी ऐसी सुरक्षा योजना के बारे में नहीं सुना है। मुझे लगता है कि ऐसा कोई अच्छा कारण है कि मैंने इसके बारे में नहीं सुना है - क्या आप वाकई सुरक्षात्मक हैं जितना आप चाहते हैं?

कन्स्ट्रक्टर को पासवर्ड रखने की आवश्यकता के अनुसार, आप अपनी कक्षा का उपयोग करने वाले लोगों से खुद को बचाने की कोशिश कर रहे हैं। लेकिन वे लोग पासवर्ड की जांच को हटाने के लिए अपनी कक्षा को संकुचित और पुन: संकलित कर सकते हैं - तो आप किसके खिलाफ सुरक्षित हैं?

29

हमें इस कक्षा तक पहुंच नियंत्रित करने के लिए पासवर्ड के साथ एक कन्स्ट्रक्टर का उपयोग करने की आवश्यकता है।

यह एक स्मारक रूप से बुरा विचार की तरह लगता है, लेकिन निश्चित रूप से मुझे उस समस्या की समस्या के बारे में कुछ नहीं पता जिसे आप हल करने का प्रयास कर रहे हैं। यह आपके प्रश्न से कहीं अधिक दिलचस्प सवाल है: आप किस खतरे के खिलाफ सुरक्षा करने का प्रयास कर रहे हैं? शायद ऐसा करने का एक बेहतर तरीका है।

क्या कोई स्थिर सदस्य होने से रोकने के लिए सी # में .NET कक्षा की सुरक्षा करने का कोई तरीका है?

वरिष्ठ डेवलपर जूनियर डेवलपर्स के चेकइन की समीक्षा करते हैं। आपको वैसे भी करना चाहिए, लेकिन विशेष रूप से यदि कक्षा में किसी प्रकार की सुरक्षा अर्थशास्त्र है।

क्या ऐसी सुविधा, यदि उपलब्ध नहीं है, तो .NET के भविष्य के संस्करण के लिए उपयुक्त होगा?

चरम पर यह असंभव है।

धन्यवाद।

आपका स्वागत है!

+3

मेरे दिमाग से विचारों को चुरा लिया। – StriplingWarrior

+5

+5 'आपका स्वागत है!' –

+2

@ सिंपलकोडर: मेरी मां ने मुझे यह कहने के लिए सिखाया कि जब कोई मुझे धन्यवाद देता है। –

0

सुझाव

  1. प्रशिक्षण
  2. अधिक प्रशिक्षण
  3. कोड समीक्षा
  4. दूसरों StyleCop या FxCop सुझाव दिया - दोनों अच्छे विकल्प
  5. तो # 4 में विफल रहता है - और अधिक प्रशिक्षण - इस समय टाई इसे करने के लिए प्रदर्शन समीक्षाएँ। :)
0

मैं एरिक लिपर्ट से काफी सहमत हूं। लेकिन उन मामलों में मैं ऐसा कुछ करना चाहता हूं (कभी-कभी सिर्फ गलतियों को रोकने के लिए खुद को रोकने के लिए) मैं इसके लिए एक यूनिट टेस्ट लिखने की कोशिश करता हूं। इस तरह:

[Test] 
public void Class_should_not_have_static_methods() 
{ 
    var staticMethods = typeof (Foo).GetMethods().Where(x => x.IsStatic); 

    Assert.That(staticMethods.Count(), Is.EqualTo(0), "Static methods: " + string.Join(", ", staticMethods.Select(x => x.Name))); 
} 
संबंधित मुद्दे

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