2008-12-01 12 views
11

मुझे इन दो वर्गों पर बातचीत कर रही है और मैं कक्षा दो में उपयोग के लिए कक्षा एक से चार अलग-अलग वर्गों को कॉल करने की कोशिश कर रहा हूं।मैं किसी अन्य वर्ग में सार्वजनिक विधि क्यों नहीं कह सकता?

विधियां सार्वजनिक हैं और वे मूल्य वापस करते हैं लेकिन किसी कारण से कोई कनेक्शन नहीं बनाया जा रहा है। त्रुटि मैं जब मैं कोशिश है: "An object reference is required for the nonstatic field, method, or property 'GradeBook.[method I want called]'"


मैं सब कुछ प्रारंभ की है। मैं विधियों को स्थिर के रूप में नहीं बनाना चाहता हूं। मैंने फिर से अपने असाइनमेंट के विनिर्देशों पर पढ़ा और मुझे ऐसा भी नहीं माना जाता है, लेकिन मुझे यह काम करने के लिए प्रतीत नहीं होता है, वैसे भी मैं इसे शब्द देता हूं।

myGradeBook। [विधि] GraceBook। [विधि]

यह सभी त्रुटियों को बनाने के लिए लगता है।

वर्तमान त्रुटियों:

The best overloaded method match or 'System.Console.WriteLine(string, object)' has some invalid arguments. 

Arugment '2': cannot convert from 'method group' to 'object' 

मैं भी sur नहीं कर रहा हूँ उन क्या मतलब ....

संपादित करें: मैं सिर्फ तय दृश्य स्टूडियो की सुविधा में कदम करने के लिए है कि समस्या धन्यवाद। मुझे नहीं पता कि इसका उपयोग करने में मुझे इतना समय क्यों लगा।

+0

कृपया की तरह अधिक स्पष्टीकरण जोड़ने आप विधि का आविष्कार कैसे कर रहे हैं, क्या यह एक स्थिर विधि है, या एक उदाहरण विधि आदि अन्यथा यह प्रश्न व्याख्या के लिए छोड़ा जाएगा .. सभी बेहतरीन। –

+1

अच्छी तरह से, मैंने आपके होमवर्क से कुछ सीखा ... – discorax

उत्तर

4

आपको कक्षा के प्रकार का एक चर बनाना है, और इसे पहले ऑब्जेक्ट के नए उदाहरण के बराबर सेट करना है।

GradeBook myGradeBook = new GradeBook(); 

फिर उस विधि को कॉल करें जिसे आपने अभी बनाया है।

myGradeBook.[method you want called] 
+0

इसका वोट क्यों कम है? –

+0

मेरी गलती, मैंने कुछ गलत तरीके से पढ़ा और स्टैक ओवरफ्लो पर था जब मैं बेहद थक गया था। मैं अब अपने डाउनवोट को पूर्ववत नहीं कर सकता ;-( – JoshBerke

+0

आप नीचे दिए गए वोट को पूर्ववत करने के लिए नीचे दिए गए वोट तीर पर फिर से क्लिक कर सकते हैं। –

36

आप कक्षा पर एक उदाहरण विधि कॉल करने का प्रयास कर रहे हैं। किसी वर्ग पर एक इंस्टेंस विधि कॉल करने के लिए आपको विधि को कॉल करने के लिए एक उदाहरण बनाना होगा। यदि आप गैर-उदाहरणों पर विधि को कॉल करना चाहते हैं तो स्थिर कीवर्ड जोड़ें। उदाहरण के लिए

class Example { 
    public static string NonInstanceMethod() { 
    return "static"; 
    } 
    public string InstanceMethod() { 
    return "non-static"; 
    } 
} 

static void SomeMethod() { 
    Console.WriteLine(Example.NonInstanceMethod()); 
    Console.WriteLine(Example.InstanceMethod()); // Does not compile 
    Example v1 = new Example(); 
    Console.WriteLine(v1.InstanceMethod()); 
} 
+0

जब मैं विधि बदलता हूं तो मैं स्थैतिक कहने के लिए कॉल करना चाहता हूं तो उस विधि के अंदर चर पागल हो जाते हैं और मैं अधिक त्रुटियां प्राप्त करें। मैं जीत नहीं सकता। – Harris

+3

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

+0

मेरे लाभ के लिए अनुवर्ती प्रश्न। क्या आप कभी भी क्लास का उदाहरण बनाये बिना स्टेटिक विधि को कॉल कर सकते हैं, क्योंकि ऐसा लगता है कि आप उदाहरण में ऐसा कर रहे हैं। मुझे यकीन होगा सोमवार को इसे आजमाने के लिए धन्यवाद। – discorax

12

ऐसा लगता है कि आप अपनी कक्षा को तुरंत चालू नहीं कर रहे हैं। यही कारण है कि मुझे "ऑब्जेक्ट रेफरेंस आवश्यक है" त्रुटि मिलती है।

MyClass myClass = new MyClass(); 

एक बार आप उस लाइन को जोड़ दिया है तो आप अपने विधि

myClass.myMethod(); 

भी कॉल कर सकते हैं, अपनी कक्षाओं के सभी एक ही नाम स्थान में हैं? जब मैं पहली बार सी सीख रहा था # यह मेरे लिए एक आम ट्रिपिंग पॉइंट था।

+2

+1 क्योंकि यह सही उत्तर की तरह दिखता है। जो भी इसे कम करता है, मेरी इच्छा है कि वे यहां टिप्पणी करेंगे। – Karl

2

उदाहरण के लिए 1 और 2 आप स्थिर तरीकों बनाने की जरूरत:

public static string InstanceMethod() {return "Hello World";} 

तो उदाहरण के लिए 3 के लिए आप अपनी वस्तु का एक उदाहरण की जरूरत विधि आह्वान करने के लिए:

object o = new object(); 
string s = o.InstanceMethod(); 
संबंधित मुद्दे