0
public class TouchableArea  {
public Rect rect;   

public Rect Rect{
    get{return rect;}
    set{rect = value;}
}
}

上記は私のクラスです。構造体であり、新しい値を設定Rectする関数があります。Setプロパティを使用して rect に新しい値を設定しても何も起こりませんが、rect を直接使用するとすべて問題ありません。

TouchableArea t = new TouchableArea();
t.Rect.Set(newValue);//Through property, nothing happens
t.rect.Set(newValue);//Directly access, it works.

これは、プロパティを介して関数を呼び出すことは違法であることを意味しますか?

4

2 に答える 2

4

プロパティを変更すると、ILはオブジェクトを返すメソッドを呼び出します。これは「値」オブジェクトであるため、t.Rectオブジェクトrectを返さず、コピーを返します。したがって、のコピーを変更していますrect

于 2012-04-23T03:13:48.017 に答える
1

基本的なレベルでは、構造体のプロパティを変更しても機能しません。構造体は値の型であり、割り当てられた値の型はコピーを受け取るだけだからです。したがって、変更を元にカスケードすることはできません。

問題はそのように合理化できますが。一部のコンパイラ作成者は、私たちに代わって魔法を実行できます。これは、Miguel de Icaza が C# に提案しようとしているものです。

http://tirania.org/blog/archive/2012/Apr-11.html

VB.NET がプロパティに ByRef を持つことができる場合 (言語設計者による合理化が行われず、それが実現できない理由はありませんでした。彼らはそれをコード化するだけで、魔法のように感じます。何らかの漏れのある抽象化が発生する可能性があります)。それを促進することによって、しかし彼らにとって、いわば利点は欠点をはるかに上回ります)。コピーされた構造体のプロパティも、彼の提案を受け入れる場合は変更できます

于 2012-04-23T03:23:04.857 に答える