Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ クラスオブジェクト対構造体オブジェクト | オブジェクト指向プログラミング(OOP)イントロダクション
C#オブジェクト指向構造

bookクラスオブジェクト対構造体オブジェクト

メニューを表示するにはスワイプしてください

クラスオブジェクトも構造体と同様に配列、ディクショナリ、リストに格納可能ですが、クラスオブジェクトは参照渡し構造体オブジェクトは値渡しである点に注意が必要です。

この概念は、intfloatdoubleのような単純な値をメソッドに渡す場合と、複雑なオブジェクトや構造体をメソッドに渡す場合で挙動が異なるため重要です。例を見てこの概念をより理解しましょう。

ここでは、シンプルな構造体オブジェクトを作成し、それをメソッドに渡します。メソッド内でその値を変更し、元のオブジェクトの値がどうなるかを確認します。

index.cs

index.cs

copy
123456789101112131415161718192021222324252627
using System; // Defining a simple structure struct Example { public int value; } public class ConsoleApp { static void exampleMethod(Example passedObject) { passedObject.value += 10; Console.WriteLine($"passedObject: {passedObject.value}"); } public static void Main(string[] args) { // Creating and initialising an object Example originalObject = new Example(); originalObject.value = 7; // Passing that object into a method exampleMethod(originalObject); // Checking the value of the originalObject Console.WriteLine($"originalObject: {originalObject.value}"); } }

出力結果から、passedObject の値は更新されましたが、originalObject の値は変更されていないことが分かります。これは、構造体オブジェクトをメソッドに渡すと、そのオブジェクトの複製が作成されてメソッドに渡される、つまり値渡しであることを示しています。

次に、まったく同じコードで structclass に変更してみましょう。

index.cs

index.cs

copy
123456789101112131415161718192021222324252627
using System; // Defining a simple class class Example { public int value; } public class ConsoleApp { static void exampleMethod(Example passedObject) { passedObject.value += 10; Console.WriteLine($"passedObject: {passedObject.value}"); } public static void Main(string[] args) { // Creating and initialising an object Example originalObject = new Example(); originalObject.value = 7; // Passing that object into a method exampleMethod(originalObject); // Checking the value of the originalObject Console.WriteLine($"originalObject: {originalObject.value}"); } }

出力が変化していることに気づくでしょう。今回は passedObjectoriginalObject の両方が同じ値になっています。これは、クラスオブジェクトをメソッドに渡すと、元のオブジェクトへの参照がメソッドに渡されるため、passedObject を変更すると originalObject も変更されることを示しています。

この特性は、オブジェクトを変数に代入する場合にも当てはまります。以下は、構造体オブジェクトの挙動を示す例です。

index.cs

index.cs

copy
12345678910111213141516171819202122232425
using System; struct Num { public int value; } public class ConsoleApp { public static void Main(string[] args) { // Creating and initiating 'a' Num a = new Num(); a.value = 7; // Creating 'b' and setting it equal to a. Num b = a; Console.WriteLine($"a is {a.value} and b is {b.value}"); // Now we change the value of 'b' to something else b.value = 9; Console.WriteLine($"a is {a.value} and b is {b.value}"); } }

同じコードですが、今回はクラスオブジェクトの場合です:

index.cs

index.cs

copy
12345678910111213141516171819202122232425
using System; class Num { public int value; } public class ConsoleApp { public static void Main(string[] args) { // Creating and initiating 'a' Num a = new Num(); a.value = 7; // Creating 'b' and setting it equal to a. Num b; b = a; Console.WriteLine($"a is {a.value} and b is {b.value}"); // Now we change the value of 'b' to something else b.value = 9; Console.WriteLine($"a is {a.value} and b is {b.value}"); } }

1. クラスオブジェクトは次の通りです:

2. 以下のコードは、クラスオブジェクトをリストやディクショナリと共に使用する方法を示しています。コード内のコメントで説明されています。コードを読み、正しい出力を示す選択肢を選んでください。コードは長いですが、良いコードリーディングの練習になります。

question mark

クラスオブジェクトは次の通りです:

正しい答えを選んでください

question mark

以下のコードは、クラスオブジェクトをリストやディクショナリと共に使用する方法を示しています。コード内のコメントで説明されています。コードを読み、正しい出力を示す選択肢を選んでください。コードは長いですが、良いコードリーディングの練習になります。

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 3.  5

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 3.  5
some-alt