■79794 / inTopicNo.9) |
Re[5]: 変数=new 構造体名(a,b) という構文 |
□投稿者/ 魔界の仮面弁士 (706回)-(2016/05/16(Mon) 15:18:55)
|
■No79788 (DOZO さん) に返信 > player.Position = player.Position + new asd.Vector2DF(0, -1); > このように構造体インスタンスに名前をつけることなくいきなり変数のように使ってもいいのでしょうか?
問題ありません。極端な例で言えば、たとえば、 int a = 123; int b = 456; int c = a + b; において、変数 a, b を用いずに int c = 123 + 456; と書く事ができますが、それと同じ事です。 (int 型も構造体であり、123 は int 型のインスタンスです)
Position プロパティのデータ型は、Vector2DF 構造体です。 そして Vector2DF 構造体は、Vector2DF 同士の加算演算が可能です。
int 型というのは、.NET 的には System.Int32 構造体です。 そして Int32 構造体は、Int32 同士の加算演算が可能です。
なお int の場合は、123 といったリテラル表記で記述するので、 通常、new することはありませんが、構造体には違いないので、 int x = new int(); のように new を使ってインスタンス化することができます。
※ただし Int32 は、引数付きの呼び出しはサポートしていないため、 上記は単に「int x = 0;」や「int x = default(int);」と同義です。
他の構造体でも同様です。たとえば System.TimeSpan 構造体の場合も TimeSpan 同士の加算演算が可能なので:
TimeSpan ts1 = new TimeSpan(0, 40, 0); // 40 分 TimeSpan ts2 = new TimeSpan(0, 50, 0); // 50 分 ts2 = ts2 + ts1; // 40分+50分=1時間30分 Console.WriteLine(ts2.ToString());
上記を
// 40分+50分=1時間30分 System.TimeSpan ts3 = new TimeSpan(0, 50, 0) + new TimeSpan(0, 40, 0); Console.WriteLine(ts3.ToString());
と書けますし、もっと言えば
Console.WriteLine((new TimeSpan(0, 50, 0) + new TimeSpan(0, 40, 0)).ToString());
とも書けることになります。
|
|