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


80

下面的代码在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");
        }
    }
}

当我编译上面的代码时,出现此错误:

错误:“流”:成员名称不能与其封闭类型相同

为什么?我该如何解决?

Answers:


126

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

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

或将函数重命名为:

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

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


2
但是,在做(的价值)xy来自哪里?
Henk Holterman

2
请注意,如果错误地将您的类名和xaml名称相同,也会发生此错误。今天发生在我身上。
NewBie1234 '18

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类同名。没有返回类型。C。每次使用该类创建对象时,都会调用。对于例如-在您的程序中,如果您创建了两个Flow对象,则Flow flow1 = new Flow(); Flow flow2 = new Flow(); 然后Flow构造函数将被调用2次。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.