C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#での値型と参照型の説明と対比


一般に、C#のすべての型は、2つの主要なカテゴリ(値型)に分類できます。 および参照型 。それぞれのタイプを詳しく見ていきましょう。

値型

値型の変数には、データが直接含まれています。各変数には、データの独自のコピーがあります。したがって、値型の変数が別のオブジェクトを変更することはできません。

値の型は、次のいずれかの型になります-

  • すべての数値型( int、float、など) およびダブル
  • char およびブール タイプ
  • 構造体 タイプまたは
  • 列挙 タイプ。

simpleの値型には、値が含まれます。たとえば、整数型には実際の数値が含まれ、参照型のように数値へのポインタは含まれません。

カスタム値型を作成するには、構造体を使用できます。例-

public struct Point
{
public int X;
public int Y;
}
var p1 = new Point();

メモリ内では、ポイントのインスタンスは次のように表されます-

C#での値型と参照型の説明と対比

値型の変数を別の変数に割り当てると、割り当て操作によって、割り当てられている値のコピーが作成されます。たとえば、

Point p2 = p1;

C#での値型と参照型の説明と対比

参照型

参照型の変数は、それらのオブジェクトへの参照を格納します。 2つの異なる変数が同じオブジェクトへの参照を保持する可能性があります。 1つの変数がオブジェクトに加えた変更は、2番目の変数に表示されます。

参照型は次の型で構成されます-

  • 文字列
  • クラス
  • 配列
  • 委任
  • インターフェース

たとえば、次のように参照型であるクラスを作成できます-

public class Point{
   public int X;
   public int Y;
}
var p1 = new Point();

C#での値型と参照型の説明と対比

参照型の変数を別の変数に割り当てる場合、割り当て操作は実際のオブジェクトではなく、単に参照をコピーします。

Point p2 = p1;

C#での値型と参照型の説明と対比

using System;
class Program{
   static void Main(){
      var p1 = new Point { X = 10 };
      Point p2 = p1;
      p2.X = 20;
      Console.WriteLine("Value Type");
      Console.WriteLine(p1.X);
      Console.WriteLine(p2.X);
      var u1 = new User { Age = 10 };
      User u2 = u1;
      u2.Age = 20;
      Console.WriteLine("Reference Type");

      Console.WriteLine(u1.Age);
      Console.WriteLine(u2.Age);
   }
}
public struct Point{
   public int X;

   public int Y;
}
public class User{
   public int Age { get; set; }
}

出力

Value Type
10
20
Reference Type
20
20

  1. Cプログラミングの参照とポインタを説明しますか?

    問題 例を使用して、cプログラミング言語での参照とポインターの概念を説明します。 参照 これは、宣言した変数の別名です。 値渡しを使用してアクセスできます。 null値を保持することはできません。 構文 datatype *variablename たとえば、int * a; //aにはint型変数のアドレスが含まれています。 ポインタ 変数のアドレスを格納します。 ポインタを使用してnull値を保持できます。 参照渡しを使用してアクセスできます。 変数の宣言中に初期化する必要はありません。 構文 pointer variable= &am

  2. 例を使用して、Cの揮発性および制限型修飾子を説明します

    型修飾子は、Cプログラミング言語の既存のデータ型に特別な属性を追加します。 C言語には3つの型修飾子があり、揮発性および制限型の修飾子については以下で説明します- 揮発性 揮発性型修飾子は、変数が共有されていることをコンパイラーに通知するために使用されます。つまり、変数が揮発性として宣言されている場合、変数は他のプログラム(または)エンティティによって参照および変更される可能性があります。 たとえば、volatile int x; 制限 これは、ポインターでのみ使用されます。これは、ポインタが差分データにアクセスするための最初の方法にすぎないことを示しています。最適化のためにコ