【问题标题】:member names cannot be the same as their enclosing type C#成员名称不能与其封闭类型 C# 相同
【发布时间】:2012-04-21 16:16:23
【问题描述】:

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

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

【问题讨论】:

    标签: c#


    【解决方案1】:

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

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

    或者将函数重命名为:

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

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

    【讨论】:

    • 但是xy 的(值)从何而来?
    • 请注意,如果错误地您的类名和您的 xaml 名称相同,也会发生此错误。今天发生在我身上。
    【解决方案2】:

    问题出在方法上:

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

    你的类被命名为Flow,所以这个方法不能也命名为Flow。您必须将 Flow 方法的名称更改为其他名称才能编译此代码。

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

    【讨论】:

      【解决方案3】:

      构造函数不返回 type ,只需删除在您的情况下为 void 的返回类型。这样就可以正常运行了。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            【解决方案6】:

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

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

            一个。与班级同名 湾。没有返回类型。 C。每次使用该类创建对象时都会调用。例如-在你的程序中,如果你制作了两个 Flow 对象, 流流1=新流(); 流流 2=新流(); 然后 Flow 构造函数将被调用 2 次。

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-08-24
              • 2012-05-29
              • 1970-01-01
              • 1970-01-01
              • 2014-03-05
              • 2020-07-26
              相关资源
              最近更新 更多