멤버 이름은 둘러싸는 유형 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");
        }
    }
}

위 코드를 컴파일 할 때이 오류가 발생합니다.

오류 : 'Flow': 멤버 이름은 엔 클로징 유형과 같을 수 없습니다.

왜? 어떻게 해결할 수 있습니까?

답변:


127

클래스 이름과 동일한 메서드 이름을 생성자 라고 합니다. 생성자에는 반환 유형이 없습니다. 따라서 다음과 같이 정확합니다.

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

또는 함수의 이름을 다음과 같이 변경하십시오.

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

전체 코드가 나에게 의미가 없지만.


2
그러나 경우 (값을) 할 x과 y에서 오는?
— Henk Holterman 2012

2
실수로 클래스 이름과 xaml 이름이 동일한 경우에도이 오류가 발생할 수 있습니다. 오늘 나에게 일어났다.
— NewBie1234

27

문제는 방법에 있습니다.

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

클래스 이름이 지정 Flow되므로이 메서드의 이름도 지정할 수 없습니다 Flow. Flow이 코드를 컴파일 하려면 메서드 이름을 다른 이름으로 변경해야합니다 .

아니면 클래스를 초기화하기 위해 개인 생성자를 만들려고 했습니까? 이 경우 void생성자 선언을 컴파일러에 알리기 위해 키워드를 제거 해야합니다.


6

생성자는 유형을 반환하지 않고 귀하의 경우에 무효 인 반환 유형을 제거하기 만하면됩니다. 그러면 잘 실행됩니다.


4

생성자가 클래스의 시작 부분에 있어야하므로 위의 문제에 직면하게됩니다. 따라서 이름을 변경하거나 생성자로 사용하려면 클래스 시작 부분에 메서드를 복사하면됩니다.


3

생성자는 void와 같은 반환 유형이 없기 때문에 이것을 제거하십시오.

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

2

생성자에는 반환 유형이 없어야합니다. 각 생성자 앞에 void를 제거합니다.

생성자의 매우 기본적인 특성 :

ㅏ. 클래스 b와 같은 이름. 반환 유형이 없습니다. 씨. 클래스로 객체를 만들 때마다 호출됩니다. 예를 들어 프로그램에서 두 개의 Flow 객체를 만든 경우 Flow flow1 = new Flow (); 흐름 flow2 = new Flow (); 그런 다음 Flow 생성자가 2 번 호출됩니다.

디. 생성자를 한 번만 호출하려면이를 static (정적 생성자)으로 선언하고 static constructor에서 액세스 수정자를 제거하는 것을 잊지 마십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.