C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: ポイントをクラスに入れる方法


(過去ログ 157 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■91414 / inTopicNo.1)  ポイントをクラスに入れる方法
  
□投稿者/ Spire (1回)-(2019/06/23(Sun) 12:58:14)

分類:[.NET 全般] 

以下のようにポイントをPropertyに含むクラスを作成したいのですが、


    Public Class aaa
        Property bbb As New Point
        Property ccc As New PointF
    End Class

以下のように、値に数値を代入しようとしても

        Dim ggg As New aaa

        ggg.bbb.X = 5

式が値であるため、代入式のターゲットにすることはできません。
というエラーが出て実行できません。

一体、どうすれば、ポイントをクラスに入れることができますでしょうか?

引用返信 編集キー/
■91415 / inTopicNo.2)  Re[1]: ポイントをクラスに入れる方法
□投稿者/ bbq (1回)-(2019/06/23(Sun) 16:00:20)
PointはStructureなので、この場合は
ggg.bbb = New Point(5, ggg.bbb.Y)
とします。

https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/error-messages/expression-is-a-value-and-therefore-cannot-be-the-target-of-an-assignment
引用返信 編集キー/
■91417 / inTopicNo.3)  Re[1]: ポイントをクラスに入れる方法
□投稿者/ Azulean (1071回)-(2019/06/23(Sun) 18:51:04)
No91414 (Spire さん) に返信
>
> Dim ggg As New aaa
>
> ggg.bbb.X = 5

ggg.bbb.X は 2 段階に分かれています。

1. ggg.bbb から Point 構造体の値のコピーを取得する
2. 取得されたコピーの Point 構造体の X プロパティを書き換える

こういった動きになってしまうのは、Point 構造体が値型だからです。
値型と参照型について学び、実験していただくとより理解が深まると思います。

解決策についてはすでにコメントのあるとおり、Point 構造体を ggg.bbb に設定するコードにすれば良いです。
引用返信 編集キー/
■91418 / inTopicNo.4)  Re[2]: ポイントをクラスに入れる方法
□投稿者/ Spire (2回)-(2019/06/23(Sun) 22:11:35)
そういうことでしたか。
どうも勉強になりました。
ありがとうございます。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -