成员名称不能与其封闭类型C#相同

时间:2012-04-09 08:25:52

标签: c#

下面的代码在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':成员名称不能与其封闭类型相同

为什么呢?我该如何解决这个问题?

6 个答案:

答案 0 :(得分:109)

与类名相同的方法名称称为构造函数。构造函数没有返回类型。所以正确如下:

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

或者将该功能重命名为:

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

虽然整个代码对我没有任何意义。

答案 1 :(得分:23)

问题在于方法:

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

您的类名为Flow,因此此方法也不能命名为Flow。您必须将Flow方法的名称更改为其他名称才能使此代码编译。

或者你的意思是创建一个私有构造函数来初始化你的类?如果是这种情况,则必须删除void关键字,以便编译器知道您声明了构造函数。

答案 2 :(得分:5)

构造函数不返回类型,只需删除在您的情况下为void的返回类型。它会好起来的。

答案 3 :(得分:3)

只是删除它,因为构造函数没有像void这样的返回类型 它会是这样的:

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

答案 4 :(得分:2)

构造函数不应该有返回类型。 在每个构造函数之前删除void。

构造函数的一些非常基本的特性:

一个。与班级相同的名称 湾没有返回类型。 C。每次用类创建一个对象时都会调用它。例如,如果你制作两个Flow对象,你的程序中, Flow flow1 = new Flow(); Flow flow2 = new Flow();  然后将调用Flow构造函数2次。

d。如果你想只调用一次构造函数,那么将它声明为static(静态构造函数),并且不要忘记从静态构造函数中删除任何访问修饰符。

答案 5 :(得分:2)

由于构造函数应该在类的开头,因此您将遇到上述问题。因此,您可以更改名称,或者如果要将其用作构造函数,只需在类的开头复制该方法即可。