2010-07-30 21 views
7

सी # में, पैरामीटर पास किए बिना विभिन्न वर्गों में एक स्थिर विधि के माध्यम से एक आवृत्ति चर का उपयोग करना संभव है?क्या एक स्थिर विधि के माध्यम से एक आवृत्ति चर का उपयोग करना संभव है?

हमारी परियोजना में, मेरे पास Data access layer कक्षा है जिसमें बहुत से स्थिर तरीके हैं। इन तरीकों में SqlCommand टाइमआउट मान हार्ड-कोड किया गया है। हमारे ढांचे में एक और वर्ग (Dac) में कई उदाहरण विधियां हैं जो इन स्थिर तरीकों को कॉल करती हैं।

मैं पैरामीटर पासिंग का उपयोग करके बहुत अधिक कोड नहीं करना चाहता हूं। क्या आपके पास कोई अन्य समाधान है जो पैरामीटर गुजरने से आसान है?

+0

एक स्थिर विधि किसी भी घटना तो आप इसे कैसे पता करने के लिए उम्मीद करते हैं साथ जुड़ा नहीं है जो उदाहरण एक सदस्य का उपयोग करने के लिए? –

+0

किस उदाहरण? –

उत्तर

11

हां, पैरामीटर का उपयोग किए बिना एक स्थिर विधि से एक आवृत्ति चर का उपयोग करना संभव है, लेकिन केवल तभी जब आप स्थिर घोषित किए गए किसी चीज़ के माध्यम से इसे एक्सेस कर सकते हैं। उदाहरण:

public class AnotherClass 
{ 
    public int InstanceVariable = 42; 
} 

public class Program 
{ 
    static AnotherClass x = new AnotherClass(); // This is static. 

    static void Main(string[] args) 
    { 
     Console.WriteLine(x.InstanceVariable); 
    } 
} 
+4

+1, लेकिन ओह [वैश्विक चर के डरावनी] (http://c2.com/cgi/wiki?GlobalVariablesAreBad)! –

+0

हाँ ... बचपन की दुःस्वप्न की यादें सामने लाती है! –

5

निश्चित रूप से, आप विधि के पैरामीटर के रूप में एक उदाहरण पास कर सकते हैं। पसंद:

public static void DoSomething(Button b) 
{ 
    b.Text = "foo"; 
} 

लेकिन अन्यथा किसी भी आवृत्ति चर को प्राप्त करना संभव नहीं होगा।

+0

धन्यवाद जेक, लेकिन मैंने सवाल बदल दिया। – mkus

6

एक स्थिर विधि के साथ काम करने के लिए कोई उदाहरण नहीं है, इसलिए नहीं। पैरामीटर गुजरने के बिना यह संभव नहीं है।

आपके लिए एक और विकल्प कक्षा के स्थिर उदाहरण का उपयोग करना हो सकता है (मार्क का उदाहरण इस विधि को काम पर दिखाता है) हालांकि, आपके उदाहरण से, मुझे यकीन नहीं है कि आपकी समस्या का समाधान होगा।

व्यक्तिगत रूप से, मुझे लगता है कि पैरामीटर पासिंग सबसे अच्छा विकल्प होगा। मुझे अभी भी यकीन नहीं है कि आप इससे दूर क्यों शर्मीला करना चाहते हैं।

+0

जस्टिन, मैंने आपकी रुचि के लिए अपना प्रश्न संपादित किया। – mkus

+1

संपादन "मैं नहीं चाहता" के लिए उबाल जाता है, जो एक अच्छा तकनीकी कारण नहीं है। विकल्प असंभव नहीं है, वास्तव में वास्तव में बुरा है। – siride

1

नहीं, आप नहीं कर सकते।

यदि आप एक आवृत्ति चर का उपयोग करना चाहते हैं तो परिभाषा के अनुसार आपकी विधि स्थैतिक नहीं होनी चाहिए।

+0

सिंगलेट्स के इंस्टेंस गुणों तक पहुंचने के बारे में क्या? –

+1

@ रिचर्ड: एक सिंगलटन के साथ आपके पास एक उदाहरण है, और उस मामले में विधियां स्थिर नहीं होंगी। सिंगलटन उदाहरण प्राप्त करने के लिए केवल विधि स्थिर है। –

2

हां यह तब तक हो सकता है जब तक कि इसमें किसी ऑब्जेक्ट का दायरा न हो। उदाहरण के लिए Singletons, या विधि के भीतर ही बनाई वस्तुओं .. उदाहरण के लिए

लें एक आम परिदृश्य:

public static string UserName 
{ 
    return System.Web.HttpContext.Current.User.Identity.Name; 
} 
संबंधित मुद्दे

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