सदस्य नाम उनके संलग्न प्रकार C # के समान नहीं हो सकते


81

नीचे दिया गया कोड C # में है और मैं Visual Studio 2010 का उपयोग कर रहा हूं।

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;

namespace FrontEnd
{
    class Flow
    {
        long i;
        private int x,y;
        public int X
        {
            get;set;
        }
        public int Y
        {
            get;set;
        }

        private void Flow()
        {
            X = x;
            Y = y;
        }

        public void NaturalNumbers(int x, int y)
        {
            for (i = 0; i < 9999; i++)
            {
                Console.WriteLine(i);
            }
            MessageBox.Show("done");
        }
    }
}

जब मैं उपरोक्त कोड संकलित करता हूं तो मुझे यह त्रुटि मिलती है:

त्रुटि: 'फ़्लो': सदस्य नाम उनके संलग्न प्रकार के समान नहीं हो सकते

क्यों? मैं इसे कैसे हल करूं?

जवाबों:


127

विधि के नाम जो वर्ग के नाम के समान हैं उन्हें निर्माणकर्ता कहा जाता है । कंस्ट्रक्टर्स के पास रिटर्न टाइप नहीं है। तो सही के रूप में:

private Flow()
{
   X = x;
   Y = y;
}

या फ़ंक्शन का नाम बदलें:

private void DoFlow()
{
   X = x;
   Y = y;
}

हालांकि पूरे कोड का मेरे लिए कोई मतलब नहीं है।


2
लेकिन कहाँ (के मूल्यों) xऔर से yआते हैं?
— हेनक होल्टरमैन

2
ध्यान दें कि यह त्रुटि तब भी हो सकती है जब गलती से आपके वर्ग का नाम और आपका xaml नाम समान हो। आज मेरे पास आया।
— NewBie1234

27

समस्या विधि के साथ है:

private void Flow()
{
    X = x;
    Y = y;
}

आपकी कक्षा का नाम है Flow इसलिए इस विधि भी नहीं दिया जा सकता है Flow। Flowइस कोड को संकलित करने के लिए आपको विधि का नाम बदलकर कुछ और करना होगा।

या आप अपनी कक्षा को इनिशियलाइज़ करने के लिए एक निजी कंस्ट्रक्टर बनाने का मतलब रखते थे? यदि ऐसी स्थिति है, तो आपको voidसंकलक को यह बताने के लिए कीवर्ड निकालना होगा कि आपका कंस्ट्रक्टर घोषित है।


6

कंस्ट्रक्टर्स एक प्रकार का रिटर्न नहीं करते हैं, केवल रिटर्न टाइप हटा दें जो आपके मामले में शून्य है। यह तब ठीक चलेगा।


4

जैसा कि निर्माता को कक्षा की शुरुआत में होना चाहिए, आप उपरोक्त मुद्दे का सामना कर रहे हैं। तो, आप या तो नाम बदल सकते हैं या यदि आप इसे एक निर्माता के रूप में उपयोग करना चाहते हैं तो कक्षा की शुरुआत में विधि की प्रतिलिपि बनाएँ।


3

बस इसे हटा दें क्योंकि कंस्ट्रक्टर के पास रिटर्न प्रकार नहीं है जैसे शून्य यह इस तरह होगा:

private Flow()
    {
        X = x;
        Y = y;
    }  

2

एक निर्माता के पास रिटर्न प्रकार नहीं होना चाहिए। प्रत्येक निर्माता से पहले शून्य निकालें।

एक निर्माता की कुछ बहुत ही बुनियादी विशेषता:

ए। वर्ग b के समान नाम। कोई वापसी प्रकार नहीं। सी। हर बार एक वस्तु को कक्षा के साथ बनाया जाता है। उदाहरण के लिए- यदि आपके प्रोग्राम में यू ने फ्लो की दो वस्तुएं बनाई हैं, फ्लो flow1 = नया फ्लो (); प्रवाह flow2 = नया प्रवाह (); फिर फ्लो कंस्ट्रक्टर को 2 बार बुलाया जाएगा।

डी यदि आप कंस्ट्रक्टर को केवल एक बार कॉल करना चाहते हैं, तो उसे स्थिर (स्टैटिक कंस्ट्रक्टर) के रूप में घोषित करें और न ही स्टैटिक कंस्ट्रक्टर से किसी भी एक्सेस मॉडिफायर को हटाना न भूलें।

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