この例では、Foo.Something と Bar.Something の間に効果的な違いはありますか?
class Foo
{
public string Something;
}
class Bar
{
public string Something{get; set;}
}
class Program
{
static void Main(string[] args)
{
var MyFoo = new Foo();
MyFoo.Something = "Hello: foo";
System.Console.WriteLine(MyFoo.Something);
var MyBar = new Bar();
MyBar.Something = "Hello: bar";
System.Console.WriteLine(MyBar.Something);
System.Console.ReadLine();
}
}
私の知る限り、それらはまったく同じように動作します。もしそうなら、Foo のように単純なフィールドを使用しないのはなぜですか? Java では、セッターを使用して、コードを壊さずに新しい不変条件を強制し、ゲッターを使用して安全なデータを返しますが、c# では、いつでも Foo を次のように書き換えることができます。
class Foo
{
private string _Something;
public string Something
{
get {
//logic
return _Something;
}
set {
//check new invariant
_Something = value;
}
}
}
そして、古いコードは壊れません。