メンバー名は、それらを囲むタイプC#と同じにすることはできません。


81

以下のコードはC#であり、Visual Studio2010を使用しています。

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から来ますか?
ヘンクホルターマン2012

2
このエラーは、誤ってクラス名とxaml名が同じ場合にも発生する可能性があることに注意してください。今日私に起こった。
NewBie1234 2018年

27

問題は次の方法にあります。

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

クラスに名前が付けられているFlowため、このメソッドにも名前を付けることはできませんFlowFlowこのコードをコンパイルするには、メソッドの名前を別の名前に変更する必要があります。

それとも、クラスを初期化するためのプライベートコンストラクターを作成するつもりでしたか?その場合は、voidキーワードを削除して、コンストラクターを宣言していることをコンパイラーに通知する必要があります。


6

コンストラクターは型を返しません。あなたの場合は無効である戻り値の型を削除するだけです。その場合は正常に実行されます。


4

コンストラクターはクラスの先頭にあるはずなので、上記の問題に直面しています。したがって、名前を変更するか、コンストラクターとして使用する場合は、クラスの先頭にあるメソッドをコピーするだけです。


3

コンストラクターにはvoidのような戻り値の型がないため、これを削除してください。次のようになります。

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

2

コンストラクターは戻り値の型を持つべきではありません。各コンストラクターの前のvoidを削除します。

コンストラクターのいくつかの非常に基本的な特性:

a。クラスbと同じ名前。戻り値の型はありません。c。クラスでオブジェクトが作成されるたびに呼び出されます。たとえば、プログラムで、フローの2つのオブジェクトを作成した場合、フローflow1 = new Flow(); フローflow2 = new Flow(); 次に、フローコンストラクターが2回呼び出されます。

d。コンストラクターを1回だけ呼び出したい場合は、それを静的(静的コンストラクター)として宣言し、静的コンストラクターからアクセス修飾子を削除することを忘れないでください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.