この小さなコードの意味を理解できません。C#予期しないプロパティの動作
using System;
namespace Test
{
struct Item
{
public int Value { get; set; }
public Item(int value)
{
Value = value;
}
public void Increment()
{
Value++;
}
}
class Bag
{
public Item Item { get; set; }
public Bag()
{
Item = new Item(0);
}
public void Increment()
{
Item.Increment();
}
}
class Program
{
static void Main(string[] args)
{
Bag bag = new Bag();
bag.Increment();
Console.WriteLine(bag.Item.Value);
Console.ReadKey();
}
}
}
コードを読んでいるだけで、私のコンソールに出力として1が読み込まれると思います。コンソールのプリントが0
私は両方
class
としてItem
を宣言する代わりにstruct
に
public Item Item { get; set; }
を変換することができ、問題を解決するには、なぜUnfortunely私は得ることはありません
public Item Item;
この現象がなぜ発生するのか、上記の「解決策」が問題を解決する理由を説明できますか?
[こちら](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/structs) - 「構造体は値型であり、クラスは参照型です。」 – peeebeee
クラスは、メソッドのような機能を追加した拡張型の構造です。したがって、C#コンパイルは構造とクラスの両方をサポートしますが、2つの異なるオブジェクトを処理するための異なる規則を使用します。クラスItemとプロパティItemの両方に同じ名前を使うべきではありません。だから正しい解決策はアイテムの小文字の 'i'を使うことです:public Item item {get;セット; } – jdweng
@jdweng:あなたはそれをテストしましたか?それでも0が表示されます。 – PaulF