6

私はと呼ばれるクラスを持っていますBaseRobot:

  var robot2 = new BaseRobot(0, 0, 0);
  private Point mHome;
  public Point Home
  {
      get { return mHome; }
  }

そこに元の家が作られているのですが、そこに新しい家を作りたいと思っていますprogram.cs。次のコードがありますが、機能しません。エラーが発生しています

変数ではないため、戻り値を変更できません。

コード:

     robot2.Home.X = 1
     robot2.Home.Y = 5;

            {

                Console.WriteLine("===New robot at specified home position===");
                StringBuilder ab = new StringBuilder();
                ab.AppendFormat("Robot#2 has home at <{0},{0}>.\r\n ", robot2.Home.X, robot2.Home.Y);
                ab.AppendFormat("It is facing {0} ", robot2.Orientation);
                ab.AppendFormat("and is currently at <{0},{0}>.\r\n", robot2.Position.X, robot2.Position.Y);
                Console.WriteLine(ab.ToString());
            }

x と Y に新しい値をどのように割り当てますか?

4

7 に答える 7

20

プロパティを直接設定する必要がありHomeます。通常は、新しいPointオブジェクトを作成するのが最善です...

robot2.Home = new System.Drawing.Point(1, 5);//x, y

また、プロパティにsetアクセサーを適用する必要があることを許可するには...Home

public Point Home
{
    get { return mHome; }
    set { mHome = value; }
}

Xコンパイラが値をプロパティに直接割り当てさせない理由についてさらに詳しい情報を知りたい場合は、ここでいくつかの回答を確認してください

于 2013-08-08T12:42:59.827 に答える
7

次のようにコードを変更する必要があります。

private Point mHome;

public Point Home
{
   get { return mHome; }
   set { mHome = value; }
}

次のように設定します。

robot2.Home = new Point(1, 5);

構造体は不変であるため、実際に値を変更すると新しいPointインスタンスが返されますが、プロパティにはセッターがありません。

于 2013-08-08T12:44:09.307 に答える
2

プロパティにsetアクセサーを追加する必要があります。Home

   private Point mHome;
   public Point Home
   {
       get { return mHome; }
       set { mHome = value; }
   }
于 2013-08-08T12:42:26.320 に答える
1

パブリック プロパティ セッターを作成するための前述のソリューションに加えて、次のこともできます。

セッター メソッドの作成 public void SetHomeX(double x) { mHome.X = x; } public void SetHomeY(double y) { mHome.Y = y; }

フィールドを public として公開する public Point Home; 注:フィールドを publicとして公開することは、通常、良い解決策ではないと考えられています。しかし、状況によっては便利かもしれません。

于 2015-08-07T08:09:31.297 に答える
0

推測ではありますが、プロパティ X と Y はおそらく Your Home プロパティのように単なるゲッターです。

ロボットクラスに位置を移動する機能はありますか?? それを使用します。完全な例を提供していない場合は、

于 2013-08-08T12:45:03.353 に答える