2
    Info myPath = new Info()
    {
        path = oFile.FileName
    };
    ...
    class Info
    {
        public string path;
        public string Path
        {
            get { return path; }
            set { path = value; }
        }
    }

上記は一部のプログラムの C# コードであり、正常に動作します。でもよくわかりません。最初の質問は、なぜ?path = oFile.FileNameと書かれていないのかということです。path = oFile.FileName;なぜセミコロンを削除できるのですか?

2 番目の質問は、なぜこのように書けないのかということmyPath.path = oFile.FileNameです。Visual Studio 2012 でエラー メッセージが表示されます。

誰でも助けてもらえますか?ありがとう!

4

7 に答える 7

3

そのコンストラクトはオブジェクト初期化子です。これは任意のステートメントのリストではありません。フィールドとプロパティの初期化のみであり、それらはカンマで区切られています。

Foo x = new Foo // Implicitly calls the parameterless constructor
{
    Property1 = value1,
    Property2 = value2
};

これは次の省略形です。

Foo tmp = new Foo();
tmp.Property1 = value1;
tmp.Property2 = value2;
Foo x = tmp;

オブジェクト初期化子は、C# 3 で導入されました。コレクション初期化子は、 を繰り返し呼び出すための効果的なシンタックス シュガーですAdd。そう:

List<string> names = new List<string>
{
    "Foo", "Bar"
};

次と同等です。

List<string> tmp = new List<string>();
tmp.Add("Foo");
tmp.Add("Bar");
List<string> names = tmp;
于 2013-09-20T11:21:11.257 に答える
0

これは、C# で変数を初期化する新しい方法です。「()」記号をスキップすることもできます。リスト、配列なども同様に初期化できます。オブジェクトに初期化する要素を挿入する必要があります。

于 2013-09-20T11:17:13.213 に答える
0
Info myPath = new Info()
{
    path = oFile.FileName
};

と同等です

Info myPath = new Info();
myPath.path = oFile.FileName;

オブジェクトの初期化構造で初期化するときは、指摘したようにプロパティ割り当てのリストを作成します。このようにして、明示的なコンストラクターを使用せずに、1 回の呼び出しでオブジェクトを作成して変数を割り当てることができます。上記は簡単に 1 行で記述できます。

詳細については、MSDN Web サイトを参照してください。

于 2013-09-20T11:21:40.443 に答える
0

C# では、オブジェクトの構築と同時に、オブジェクトのプロパティを初期化できます。

これらはすべて同等です。

var foo = new Foo();
foo.Property = "Bar";
foo.AnotherProperty = 12;


var foo = new Foo()
{
    Property = "Bar",
    AnotherProperty = 12
};


// The parentheses are not really necessary for parameterless constructors
var foo = new Foo
{
    Property = "Bar",
    AnotherProperty = 12
};
于 2013-09-20T11:22:25.343 に答える