エクスポート (0) 印刷
すべて展開
この記事は機械翻訳されたものです。 記事の文章にポインターを重ねると、原文のテキストが表示されます。 詳細情報
訳文
原文

Object.Equals メソッド (Object)

指定のオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

名前空間:  System
アセンブリ:  mscorlib (mscorlib.dll 内)

public virtual bool Equals(
	Object obj
)

パラメーター

obj
型 : System.Object
現在のオブジェクトと比較するオブジェクト。

戻り値

型 : System.Boolean
指定したオブジェクトが現在のオブジェクトと等しい場合は true。それ以外の場合は false

現在のインスタンスと obj パラメーターの比較の種類は現在のインスタンスが参照型または値型であるかどうかによって異なります。

  • 現在のインスタンスが参照型の場合、Equals(Object) のメソッドは、参照の等価性をテストし、Equals(Object) のメソッドの呼び出しは ReferenceEquals のメソッドの呼び出しと同じです。 参照の等価性を比較するオブジェクト変数が同じオブジェクトを参照していることを意味します。 次の例では、このような比較の結果を示しています。 これは参照型であり、定義と同じ値を持つ Person 2 新規オブジェクト、person1aperson2をインスタンス化するに Person クラス コンストラクターを呼び出します Person クラスを示します。 また、別のオブジェクト変数に person1aperson1bを割り当てます。 この例の出力結果が示すように、同じオブジェクトを参照するため person1aperson1b は同等です。 しかしながら、同じ値を持ちますが person1aperson2 は等価ではありません。

    
    using System;
    
    // Define a reference type that does not override Equals.
    public class Person
    {
       private string personName;
    
       public Person(string name)
       {
          this.personName = name;
       }
    
       public override string ToString()
       {
          return this.personName;
       }
    }
    
    public class Example
    {
       public static void Main()
       {
          Person person1a = new Person("John");
          Person person1b = person1a;
          Person person2 = new Person(person1a.ToString());
    
          Console.WriteLine("Calling Equals:"); 
          Console.WriteLine("person1a and person1b: {0}", person1a.Equals(person1b));               
          Console.WriteLine("person1a and person2: {0}", person1a.Equals(person2));  
    
          Console.WriteLine("\nCasting to an Object and calling Equals:");
          Console.WriteLine("person1a and person1b: {0}", ((object) person1a).Equals((object) person1b));
          Console.WriteLine("person1a and person2: {0}", ((object) person1a).Equals((object) person2)); 
       }
    }
    // The example displays the following output:
    //       person1a and person1b: True
    //       person1a and person2: False
    //       
    //       Casting to an Object and calling Equals:
    //       person1a and person1b: True
    //       person1a and person2: False
    
    
    
  • 現在のインスタンスが値型の場合、Equals(Object) のメソッドは、値が等しいかどうかをテストします。 値が等しいかどうかは、次のことを意味する:

    • 2 種類のオブジェクトが同じ型です。 次の例では、12 という値を持つ Byte オブジェクトは 2 種類のオブジェクトに異なる実行時の型があるため、12 という値を持つ Int32 オブジェクトではありません。

      
      using System;
      
      public class Example
      {
         public static void Main()
         {
            byte value1 = 12;
            int value2 = 12;
      
            object object1 = value1;
            object object2 = value2;
      
            Console.WriteLine("{0} ({1}) = {2} ({3}): {4}",
                              object1, object1.GetType().Name,
                              object2, object2.GetType().Name,
                              object1.Equals(object2));
         }
      }
      // The example displays the following output:
      //        12 (Byte) = 12 (Int32): False
      
      
      
    • 2 種類のオブジェクトのパブリック メンバーとプライベート フィールド値は同等です。 値の等価性の次の例のテスト。 これは値型であり、定義と同じ値を持つ Person 2 新規オブジェクト、person1person2をインスタンス化するに Person クラス コンストラクターを呼び出します Person 構造体を示します。 personName プライベートなフィールドの値が同じであるため、2 個のオブジェクト変数が同じオブジェクトを参照していますが、例の出力結果が person1person2 等しいためです。

      
      using System;
      
      // Define a value type that does not override Equals.
      public struct Person
      {
         private string personName;
      
         public Person(string name)
         {
            this.personName = name;
         }
      
         public override string ToString()
         {
            return this.personName;
         }
      }
      
      public struct Example
      {
         public static void Main()
         {
            Person person1 = new Person("John");
            Person person2 = new Person("John");
      
            Console.WriteLine("Calling Equals:"); 
            Console.WriteLine(person1.Equals(person2)); 
      
            Console.WriteLine("\nCasting to an Object and calling Equals:");
            Console.WriteLine(((object) person1).Equals((object) person2));  
         }
      }
      // The example displays the following output:
      //       Calling Equals:
      //       True
      //       
      //       Casting to an Object and calling Equals:
      //       True
      
      
      

Object クラスでは、すべての基本クラスは、他のすべての型には、.NET Framework Object.Equals(Object) メソッドを提供します。既定の等値比較について説明します。 ただし、型は、値の等価性を実装するに Equals のメソッドをオーバーライドします。 詳細については、呼び出し元の注意事項と継承セクションのメモを参照します。

Windows ランタイムに関するメモ

Windows ランタイムクラスの Equals(Object) メソッド オーバーロードを呼び出すと、Equals(Object)をオーバーライドしないクラスの既定の動作を示します。 これは、.NET Framework が Windows ランタイムに提供するサポートの一部です (「Windows ストア アプリおよび Windows ランタイムのための .NET Framework サポート」を参照してください)。 Windows ランタイム クラスは Objectを継承しないと、現在の Equals(Object) メソッドを実装しません。 ToString Equals(Object)C# または Visual Basic コードで使用する、.NET Framework は、これらのメソッドの既定の動作を提供します。ただし、および GetHashCode のメソッドがあり、これらは表示されます。

メモメモ

C# または Visual Basic で記述されたWindows ランタイム クラスは Equals(Object) メソッド オーバーロードをオーバーライドできます。

呼び出し元のメモ

派生クラスは、値の等価性を実装するに Object.Equals(Object) のメソッドをオーバーライドします。 また、型は、Equals のメソッドに IEquatable<T> インターフェイスの実装によって頻繁に追加厳密に型指定されたオーバーロードを通常提供します。 等価性をテストするに Equals のメソッドを呼び出すときに現在のインスタンスを Object.Equals 判断をオーバーライドし、Equals のメソッドへの呼び出しを解決する方法を理解できるようにするかどうか。 それ以外の場合、意図した、メソッドが予期しない値が返される可能性があるものとは異なる等価性のテストを実行します。

具体的な例を次に示します。 これは同じ文字列を使用して StringBuilder の 3 種類のオブジェクトをインスタンス化し、次に Equals のメソッドに 4 個の呼び出しを行います。 最初のメソッドの呼び出しは trueと残り 3 を返します。falseを返します。


using System;
using System.Text;

public class Example
{
   public static void Main()
   {
      StringBuilder sb1 = new StringBuilder("building a string...");
      StringBuilder sb2 = new StringBuilder("building a string...");

      Console.WriteLine("sb1.Equals(sb2): {0}", sb1.Equals(sb2));
      Console.WriteLine("((Object) sb1).Equals(sb2): {0}", 
                        ((Object) sb1).Equals(sb2));
      Console.WriteLine("Object.Equals(sb1, sb2): {0}",
                        Object.Equals(sb1, sb2));      

      Object sb3 = new StringBuilder("building a string...");
      Console.WriteLine("\nsb3.Equals(sb2): {0}", sb3.Equals(sb2));                              
   }
}
// The example displays the following output:
//       sb1.Equals(sb2): True
//       ((Object) sb1).Equals(sb2): False
//       Object.Equals(sb1, sb2): False
//
//       sb3.Equals(sb2): False


最初のケースでは、値が等しいかどうかをテストする StringBuilder.Equals(StringBuilder) の厳密に型指定されたメソッド オーバーロードが呼び出されます。 StringBuilder の 2 つがオブジェクトに割り当てられた文字列であるため、メソッドは true ただし、StringBuilderObject.Equals(Object)をオーバーライドしません。 このような StringBuilder のインスタンスが Object型の変数に割り当てられている場合、Object.Equals(Object, Object) のメソッドが StringBuilder の 2 つがオブジェクトに渡すとき Objectへの StringBuilder オブジェクトが、既定の Object.Equals(Object) のメソッドにキャストされる場合。 StringBuilder が参照型であるため、ReferenceEquals のメソッドへの StringBuilder の 2 種類のオブジェクトを渡すことと同じです。 StringBuilder の 3 種類のオブジェクトがすべて同じ文字列を含むが、3 個の個々のオブジェクトを示します。 その結果、この 3 種類のメソッドの呼び出しは falseを返します。

ReferenceEquals メソッドを呼び出すと、参照の等価性を確認するために現在のオブジェクトを別のオブジェクトと比較できます。 Visual Basic では、is キーワードを使用することもできます (たとえば、If Me Is otherObject Then ...)。

継承時の注意

独自の型を定義するとき、その型は、基本型の Equals のメソッドによって定義されている機能を継承します。 次の表は、主要なカテゴリの Equals のメソッドの既定の実装を .NET Framework の型を示します。

型のカテゴリ

定義される等値

コメント

Object から直接派生クラス

Object.Equals(Object)

参照の等価性; Object.ReferenceEqualsを呼び出すための等価。

Structure

ValueType.Equals

値の等価性; リフレクションを使用して直接バイトごとの比較またはフィールドごとにフィールドを比較します。

列挙型

Enum.Equals

値は同じ列挙型と同一の基になる値が必要です。

Delegate

MulticastDelegate.Equals

デリゲートが同一の呼び出しリストと同じ型である必要があります。

インターフェイス

Object.Equals(Object)

参照の等価性。

値型であるため、リフレクションには、パフォーマンスの低下に依存するかどうかをテスト Equalsを常にオーバーライドする必要があります。 また、値が等しいかどうかの参照の等価性の代わりにテストし、値の等価性の厳密な意味を定義するために参照型の Equals の既定の実装をオーバーライドできます。 同じインスタンスであっても、2 種類のオブジェクトの値が同じである Equals の戻り true のこのような実装。 型の実装は、オブジェクトの値を構成するが、通常はオブジェクトのインスタンス変数の一部またはすべてに格納されているデータがあります。を決定します。 たとえば、String オブジェクトの値は、文字列の文字に基づいています; String.Equals(Object) のメソッドと同じ順序で同じ文字を含む任意の 2 桁の文字列インスタンスの true を返すように Object.Equals(Object) のメソッドをオーバーライドします。

次の例は、値が等しいかどうかをテストするに Object.Equals(Object) のメソッドをオーバーライドする方法を示します。 これは Person クラスの Equals のメソッドをオーバーライドします。 Person で同等の基本クラスの実装を受け取る場合は、Person の 2 つがオブジェクトは単一のオブジェクトを参照している場合にのみ一致します。 ただし、この場合、Person の 2 つがオブジェクトは Person.Id のプロパティの値が同じである場合、です。


public class Person
{
   private string idNumber;
   private string personName;

   public Person(string name, string id)
   {
      this.personName = name;
      this.idNumber = id;
   }

   public override bool Equals(Object obj)
   {
      Person personObj = obj as Person; 
      if (personObj == null)
         return false;
      else
         return idNumber.Equals(personObj.idNumber);
   }

   public override int GetHashCode()
   {
      return this.idNumber.GetHashCode(); 
   }
}

public class Example
{
   public static void Main()
   {
      Person p1 = new Person("John", "63412895");
      Person p2 = new Person("Jack", "63412895");
      Console.WriteLine(p1.Equals(p2));
      Console.WriteLine(Object.Equals(p1, p2));
   }
}
// The example displays the following output:
//       True
//       True


Equals のオーバーライドに加えて、それに厳密に型指定されたテストを指定するに IEquatable<T> インターフェイスを実装できます。

次に示すステートメントは、Equals(Object) メソッドのすべての実装に対し true である必要があります。 一覧で、xyznullではないオブジェクト参照を表します。

  • x.Equals(x) は 浮動小数点型が含まれる場合を除く trueを返します。 ISO/IEC/IEEE は 60559:2011、情報テクノロジを参照してください。。マイクロプロセッサ システム。浮動小数点演算。

  • x.Equals(y)y.Equals(x)と同じ値を返します。

  • x.Equals(y)xy の両方が NaN場合 true を返します。

  • (x.Equals(y) && y.Equals(z))trueを返した場合、x.Equals(z)trueを返します。

  • x.Equals(y) に継続的な呼び出しが xy によって参照されるオブジェクトが変更されていない限り、同じ値を返します。

  • x.Equals(null)false を返します。

Equals の実装は例外をスローしてはありません; これらは常に値を返す必要があります。 たとえば、objnullの場合、Equals のメソッドは ArgumentNullExceptionをスローする代わりに false を返す必要があります。

オーバーライドの Equals(Object)と次のガイドラインに従ってください。:

  • IComparable を実装する型は、Equals(Object) をオーバーライドする必要があります。

  • オーバーライド Equals(Object)GetHashCodeをオーバーライドしないと入力します; それ以外の場合は、ハッシュ テーブルが正しく動作しないことがあります。

  • 同等の厳密に型指定されたテストをサポートする IEquatable<T> インターフェイスを実装することを検討してください。 Equals と一貫性のある結果を返すことがある IEquatable<T>.Equals の実装。

  • プログラミング言語で演算子のオーバーロードと、指定した型の等値演算子をオーバーロードすれば、等値演算子と同じ結果を返すために Equals(Object) のメソッドをオーバーライドする必要があります。 これは Equals (ArrayListHashtableなど) では、実行時に使用するクラス ライブラリ コードを確実に等値演算子がアプリケーション コードによって使用される方法と一致している。

bsc2ak47.collapse_all(ja-jp,VS.110).gif参照型のガイドライン

次のガイドラインは、参照型の Equals(Object) のオーバーライド対象:

  • 型のセマンティクスを型は、値を表すという事実に基づいている場合 Equals をオーバーライドすることを検討してください。

  • ほとんどの参照型では、Equals をオーバーライドする場合でも、等値演算子はオーバーロードしないでください。 ただし、複素数型のような、値のセマンティクスを持つ参照型を実装する場合には、等値演算子をオーバーライドする必要があります。

  • 変更可能な参照型の Equals をオーバーライドする必要があります。 これは、GetHashCode のメソッドをオーバーライドすることを Equals が必要なオーバーライドするには、前のセクションで説明したようにためです。 これは、変更可能な参照型のインスタンスのハッシュ コードをオブジェクトのハッシュ テーブルの失いますできる有効期間中に変更される可能性があります。

bsc2ak47.collapse_all(ja-jp,VS.110).gif値型のガイドライン

次のガイドラインでは、値型の Equals(Object) のオーバーライド対象:

  • 値が参照型である一つ以上のフィールドを含む値型を定義する場合は、Equals(Object)をオーバーライドする必要があります。 ValueType に用意されている Equals(Object) の実装は、フィールドがすべての値型ですが、フィールドが参照型を含む値型のフィールドごとに表示されるフィールドの比較を実行するためにリフレクションを使用して値型のバイトごとの比較を実行します。

  • Equals をオーバーライドし、開発言語で演算子のオーバーロードをサポートしている場合、等値演算子をオーバーロードしなければなりません。

  • IEquatable<T> インターフェイスを実装する必要があります。 IEquatable<T>.Equals の厳密に型指定されたメソッドを呼び出すと、obj 引数を囲むことを回避できます。

次の例は、値が等しいかどうかを指定するに Equals のメソッドをオーバーライドすると Pointから派生される Point3D クラスを示しています。Point クラスを示します。 Point が、値が等しいかどうかをテストするに Object.Equals(Object) をオーバーライドするための Object.Equals(Object) メソッドは呼び出されません。 ただし、Point3D.EqualsPointObject.Equals(Object) を実装するため Point.Equals を呼び出して値が等しいかどうかを指定します。


using System;

class Point
{
   protected int x, y;

   public Point() : this(0, 0) 
   { }

   public Point(int x, int y) 
   {
      this.x = x;
      this.y = y;
   }

   public override bool Equals(Object obj) 
   {
      //Check for null and compare run-time types.
      if ((obj == null) || ! this.GetType().Equals(obj.GetType())) {
         return false;
      }
      else { 
         Point p = (Point) obj; 
         return (x == p.x) && (y == p.y);
      }   
   }

   public override int GetHashCode() 
   {
      return (x << 2) ^ y;
   }

    public override string ToString()
    {
        return String.Format("Point({0}, {1})", x, y);
    }
}

sealed class Point3D: Point 
{
   int z;

   public Point3D(int x, int y, int z) : base(x, y) 
   {
      this.z = z; 
   }

   public override bool Equals(Object obj) 
   {
      Point3D pt3 = obj as Point3D;
      if (pt3 == null)
         return false;
      else
         return base.Equals((Point)obj) && z == pt3.z;
   }

   public override int GetHashCode() 
   {
      return (base.GetHashCode() << 2) ^ z;
   }

   public override String ToString() 
   {
        return String.Format("Point({0}, {1}, {2})", x, y, z);
    }
}

class Example 
{
  public static void Main() 
  {
     Point point2D = new Point(5, 5);
     Point3D point3Da = new Point3D(5, 5, 2);
     Point3D point3Db = new Point3D(5, 5, 2);
     Point3D point3Dc = new Point3D(5, 5, -1);

     Console.WriteLine("{0} = {1}: {2}", 
                       point2D, point3Da, point2D.Equals(point3Da));
     Console.WriteLine("{0} = {1}: {2}", 
                       point2D, point3Db, point2D.Equals(point3Db));        
     Console.WriteLine("{0} = {1}: {2}", 
                       point3Da, point3Db, point3Da.Equals(point3Db));
     Console.WriteLine("{0} = {1}: {2}", 
                       point3Da, point3Dc, point3Da.Equals(point3Dc));
  } 
}
// The example displays the following output:
//       Point(5, 5) = Point(5, 5, 2): False
//       Point(5, 5) = Point(5, 5, 2): False
//       Point(5, 5, 2) = Point(5, 5, 2): True
//       Point(5, 5, 2) = Point(5, 5, -1): False


Point.Equals のメソッドは obj の引数が null でないことと、このオブジェクトと同じ型のインスタンスを参照していることを確認します。 いずれかのチェックが失敗した場合、メソッドの戻り false

Point.Equals のメソッドの呼び出し 2 種類のオブジェクトの実行時の型が同一であるかどうかを確認 GetType のメソッド。 メソッドが C# でフォーム obj is Point または Visual Basic で TryCast(obj, Point) のチェックを使用する場合は、チェック obj と現在のインスタンスが同じ実行時の型でなくても objPointの派生クラスのインスタンスである場合 true を返します。 両方のオブジェクトが同じ型であることを確認して、メソッドは Point を入力するに obj をキャストし、2 個のオブジェクトのインスタンス フィールドを比較した結果を返します。

Point3D.Equalsで、Object.Equals(Object)をオーバーライドする Point.Equals の継承されたメソッドは、そのほかの要因される前に呼び出されます。 Point3D がシール クラス (Visual Basic でNotInheritable) であるため、C# のフォーム obj is Point のチェック objPoint3D オブジェクトであることを保証するために、Visual Basic の TryCast(obj, Point) で十分です。 Point3D オブジェクトの場合、Point オブジェクトにキャストされ、Equalsの基本クラスの実装に渡されます。 Point.Equals の継承されたメソッドの戻り true がメソッドを行う場合にのみ派生クラスで導入された z のインスタンス フィールドを比較します。

次の例では Point の 2 つがオブジェクトとして内部的に四角形を実装する Rectangle クラスを定義しています。 Rectangle クラスは、値の等価性を利用できるように Object.Equals(Object) をオーバーライドします。


using System;

class Rectangle 
{
   private Point a, b;

   public Rectangle(int upLeftX, int upLeftY, int downRightX, int downRightY) {
      this.a = new Point(upLeftX, upLeftY);
      this.b = new Point(downRightX, downRightY);
   }

   public override bool Equals(Object obj) {
      // Perform an equality check on two rectangles (Point object pairs).
      if (obj == null || GetType() != obj.GetType()) 
          return false;
      Rectangle r = (Rectangle)obj;
      return a.Equals(r.a) && b.Equals(r.b);
   }

   public override int GetHashCode() {
      return Tuple.Create(a, b).GetHashCode();
   }

    public override String ToString() 
    {
       return String.Format("Rectangle({0}, {1}, {2}, {3})",
                            a.x, a.y, b.x, b.y); 
    }
}

class Point 
{
  internal int x;
  internal int y;

  public Point(int X, int Y) {
     this.x = X;
     this.y = Y;
  }

  public override bool Equals (Object obj) {
     // Performs an equality check on two points (integer pairs).
     if (obj == null || GetType() != obj.GetType()) return false;
     Point p = (Point)obj;
     return (x == p.x) && (y == p.y);
  }

  public override int GetHashCode() {
     return Tuple.Create(x, y).GetHashCode();
  }
}

class Example 
{
   public static void Main() 
   {
      Rectangle r1 = new Rectangle(0, 0, 100, 200);
      Rectangle r2 = new Rectangle(0, 0, 100, 200);
      Rectangle r3 = new Rectangle(0, 0, 150, 200);

      Console.WriteLine("{0} = {1}: {2}", r1, r2, r1.Equals(r2));
      Console.WriteLine("{0} = {1}: {2}", r1, r3, r1.Equals(r3));
      Console.WriteLine("{0} = {1}: {2}", r2, r3, r2.Equals(r3));
   }
}
// The example displays the following output:
//    Rectangle(0, 0, 100, 200) = Rectangle(0, 0, 100, 200): True
//    Rectangle(0, 0, 100, 200) = Rectangle(0, 0, 150, 200): False
//    Rectangle(0, 0, 100, 200) = Rectangle(0, 0, 150, 200): False


C# や Visual Basic などの一部の言語で演算子のオーバーロードをサポートしています。 等値演算子をオーバーロードする型は、Equals(Object) メソッドもオーバーライドして、同様の機能を提供する必要があります。 通常は、次の例で示すように、オーバーロードされた等値演算子に置き換えて Equals(Object) メソッドを記述します。


using System;

public struct Complex {
   public double re, im;

   public override bool Equals(Object obj) {
      return obj is Complex && this == (Complex)obj;
   }

   public override int GetHashCode() {
      return Tuple.Create(re, im).GetHashCode();
   }

   public static bool operator ==(Complex x, Complex y) {
      return x.re == y.re && x.im == y.im;
   }

   public static bool operator !=(Complex x, Complex y) {
      return !(x == y);
   }

    public override String ToString()
    {
       return String.Format("({0}, {1})", re, im);
    } 
}

class MyClass 
{
  public static void Main() 
  {
    Complex cmplx1, cmplx2;

    cmplx1.re = 4.0;
    cmplx1.im = 1.0;

    cmplx2.re = 2.0;
    cmplx2.im = 1.0;

    Console.WriteLine("{0} <> {1}: {2}", cmplx1, cmplx2, cmplx1 != cmplx2);        
    Console.WriteLine("{0} = {1}: {2}", cmplx1, cmplx2, cmplx1.Equals(cmplx2));        

    cmplx2.re = 4.0;

    Console.WriteLine("{0} = {1}: {2}", cmplx1, cmplx2, cmplx1 == cmplx2);        
    Console.WriteLine("{0} = {1}: {2}", cmplx1, cmplx2, cmplx1.Equals(cmplx2));          
  }
}
// The example displays the following output:
//       (4, 1) <> (2, 1): True
//       (4, 1) = (2, 1): False
//       (4, 1) = (4, 1): True
//       (4, 1) = (4, 1): True


Complex は値型であるため、から派生することはできません。したがって、Equals(Object) のメソッドへのオーバーライドは、各オブジェクトの正確な実行時の型を確認するに GetType を呼び出す必要はありません。C# で is の演算子または Visual Basic で obj パラメーターの型をチェックするために TypeOf の演算子を使用できます。

.NET Framework

サポート対象 : 4.5.2、4.5.1、4.5、4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

サポート対象 : 4、3.5 SP1

汎用性のあるクラス ライブラリ

サポート対象 : 汎用性のあるクラス ライブラリ

Windows ストア アプリ用 .NET

サポート対象 : Windows 8

Windows Phone アプリ用 .NET

サポート対象 : Windows Phone 8、Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (サーバー コア ロールはサポート対象外), Windows Server 2008 R2 (SP1 以降でサーバー コア ロールをサポート。Itanium はサポート対象外)

.NET Framework では、各プラットフォームのすべてのバージョンはサポートしていません。サポートされているバージョンについては、「.NET Framework システム要件」を参照してください。

コミュニティの追加

追加
表示:
© 2015 Microsoft