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

わんくま同盟

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

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

ツリー一括表示

StructureにNewは不要か /ころっけ (19/06/29(Sat) 15:28) #91459
Re[1]: StructureにNewは不要か /キングダム (19/06/29(Sat) 18:00) #91461
│└ Re[2]: StructureにNewは不要か /ころっけ (19/06/30(Sun) 22:20) #91494
│  └ Re[3]: StructureにNewは不要か /Hongliang (19/06/30(Sun) 22:51) #91495
Re[1]: StructureにNewは不要か /WebSurfer (19/07/01(Mon) 11:30) #91496


親記事 / ▼[ 91461 ] ▼[ 91496 ]
■91459 / 親階層)  StructureにNewは不要か
□投稿者/ ころっけ (1回)-(2019/06/29(Sat) 15:28:45)

分類:[.NET 全般] 

クラスの場合には、インスタンスを生成するために
変数宣言時にNewをつける必要がありますが、

StructureであるPointの場合には
Dim aaa As Point
と定義しても
Dim aaa As New Point
と定義しても違いはないように思います。

これらはどちらを使用して差はないのでしょうか?


[ □ Tree ] 返信 編集キー/

▲[ 91459 ] / ▼[ 91494 ]
■91461 / 1階層)  Re[1]: StructureにNewは不要か
□投稿者/ キングダム (40回)-(2019/06/29(Sat) 18:00:34)
2019/06/29(Sat) 19:12:33 編集(投稿者)

No91459 (ころっけ さん) に返信

> これらはどちらを使用して差はないのでしょうか?

仕様上差はありません

↓こちらにNewつけてもつけなくても同じだよと書かれてます

構造体とクラス (Visual Basic) | Microsoft Docs
https://docs.microsoft.com/ja-jp/dotnet/visual-basic/programming-guide/language-features/data-types/structures-and-classes


ILを見るとNewをつけたら初期化が2回行われてました
Dim a As New Point()はこれらと同じでした
・Dim a As Point = New Point()
・Dim a As Point = Nothing


[ 親 91459 / □ Tree ] 返信 編集キー/

▲[ 91461 ] / ▼[ 91495 ]
■91494 / 2階層)  Re[2]: StructureにNewは不要か
□投稿者/ ころっけ (2回)-(2019/06/30(Sun) 22:20:39)
ありがとうございます。

ところで、ILって中間言語のことでしょうか?
どうやればそれを確認できますか?

[ 親 91459 / □ Tree ] 返信 編集キー/

▲[ 91494 ] / 返信無し
■91495 / 3階層)  Re[3]: StructureにNewは不要か
□投稿者/ Hongliang (832回)-(2019/06/30(Sun) 22:51:16)
> ところで、ILって中間言語のことでしょうか?
そうです。Intermediate Language。

> どうやればそれを確認できますか?
ildasm.exeを使えば逆アセンブルできます。
Microsoft SDKの中に入っていますが、手っ取り早くは、スタートメニューのVisual Studioフォルダに開発者コマンドプロンプトというのがあると思うので、そこからildasm.exeを起動できます。
[ 親 91459 / □ Tree ] 返信 編集キー/

▲[ 91459 ] / 返信無し
■91496 / 1階層)  Re[1]: StructureにNewは不要か
□投稿者/ WebSurfer (1849回)-(2019/07/01(Mon) 11:30:21)
No91459 (ころっけ さん) に返信

> これらはどちらを使用して差はないのでしょうか?

分類:[.NET 全般] となっていますが、VB.NET の話ですよね。

C# では new 有り無しで違いがあるようです。

構造体の使用 (C# プログラミング ガイド)
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/using-structs

"構造体は new 演算子を使用せずにインスタンス化できます。 このような場合、コンストラクターの呼び出し
が行われないため、割り当てがより効率的になります。 ただし、各フィールドは未割り当てのままになり、す
べてのフィールドが初期化されるまではオブジェクトを使用できません。 たとえば、プロパティから値を取得ま
たは設定することができません。"
[ 親 91459 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -