ParamArrayAttribute クラス

定義

メソッドを呼び出すときに、任意の数の引数を指定できることを示します。Indicates that a method will allow a variable number of arguments in its invocation. このクラスは継承できません。This class cannot be inherited.

public ref class ParamArrayAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Parameter, AllowMultiple=false, Inherited=true)]
public sealed class ParamArrayAttribute : Attribute
public sealed class ParamArrayAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Parameter, AllowMultiple=false, Inherited=true)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class ParamArrayAttribute : Attribute
type ParamArrayAttribute = class
    inherit Attribute
Public NotInheritable Class ParamArrayAttribute
Inherits Attribute
継承
ParamArrayAttribute
属性

次の例では、1つまたは複数の書式設定された気温値を表示するための Display メソッドを含む Temperature クラスを定義します。The following example defines a Temperature class that includes a Display method, which is intended to display one or more formatted temperature values. メソッドには、パラメーター配列として定義されている、formats1 つのパラメーターがあります。The method has a single parameter, formats, which is defined as a parameter array.

using System;

public class Temperature
{ 
   private decimal temp;
   
   public Temperature(decimal temperature)
   {
      this.temp = temperature;
   }
   
   public override string ToString() 
   {
      return ToString("C");
   }
   
   public string ToString(string format)
   {
      if (String.IsNullOrEmpty(format))
         format = "G";
      
      switch (format.ToUpper())
      {
         case "G":
         case "C":
            return temp.ToString("N") + "  °C";
         case "F":
            return (9 * temp / 5 + 32).ToString("N") + "  °F";
         case "K": 
            return (temp + 273.15m).ToString("N") + "  °K";
         default:
            throw new FormatException(String.Format("The '{0}' format specifier is not supported", 
                                                    format));
      }                                                         
   }         
   
   public void Display(params string []formats)
   {
      if (formats.Length == 0)
      {
         Console.WriteLine(this.ToString("G"));
      }
      else  
      { 
         foreach (string format in formats)
         {
            try {
               Console.WriteLine(this.ToString(format));
            }
            // If there is an exception, do nothing.
            catch { }
         }
      }
   }
}
Public Class Temperature 
   Private temp As Decimal
   
   Public Sub New(temperature As Decimal)
      Me.temp = temperature
   End Sub
   
   Public Overrides Function ToString() As String
      Return ToString("C")
   End Function
   
   Public Overloads Function ToString(format As String) As String
      If String.IsNullOrEmpty(format) Then format = "G"
      
      Select Case format
         Case "G", "C"
            Return temp.ToString("N") + "  °C"
         Case "F"
            Return (9 * temp / 5 + 32).ToString("N") + "  °F"
         Case "K" 
            Return (temp + 273.15d).ToString("N") + "  °K" 
         Case Else
            Throw New FormatException(String.Format("The '{0}' format specifier is not supported", _
                                                    format))
      End Select                                                         
   End Function         
   
   Public Sub Display(<[ParamArray]()> formats() As String)
      If formats.Length = 0 Then
         Console.WriteLine(Me.ToString("G"))
      Else   
         For Each format As String In formats
            Try
               Console.WriteLine(Me.ToString(format))
            ' If there is an exception, do nothing.
            Catch
            End Try   
         Next
      End If
   End Sub
End Class

次の例は、Temperature.Display メソッドの3つの異なる呼び出しを示しています。The following example illustrates three different calls to the Temperature.Display method. 最初の方法では、書式指定文字列の配列がメソッドに渡されます。In the first, the method is passed an array of format strings. 2番目のメソッドでは、4つの個別の書式指定文字列が引数として渡されます。In the second, the method is passed four individual format strings as arguments. 3番目の方法では、引数を指定せずにメソッドが呼び出されます。In the third, the method is called with no arguments. 例の出力が示すように、Visual Basic とC#コンパイラはこれを、空の文字列配列を使用して、Display メソッドへの呼び出しに変換します。As the output from the example illustrates, the Visual Basic and C# compilers translate this into a call to the Display method with an empty string array.

public class Class1
{
   public static void Main()
   {
      Temperature temp1 = new Temperature(100);
      string[] formats = { "C", "G", "F", "K" }; 

      // Call Display method with a string array.
      Console.WriteLine("Calling Display with a string array:");
      temp1.Display(formats);
      Console.WriteLine();
      
      // Call Display method with individual string arguments.
      Console.WriteLine("Calling Display with individual arguments:");
      temp1.Display("C", "F", "K", "G");
      Console.WriteLine();
      
      // Call parameterless Display method.
      Console.WriteLine("Calling Display with an implicit parameter array:");
      temp1.Display();
   }
}
// The example displays the following output:
//       Calling Display with a string array:
//       100.00  °C
//       100.00  °C
//       212.00  °F
//       373.15  °K
//       
//       Calling Display with individual arguments:
//       100.00  °C
//       212.00  °F
//       373.15  °K
//       100.00  °C
//       
//       Calling Display with an implicit parameter array:
//       100.00  °C
Public Module Example
   Public Sub Main()
      Dim temp1 As New Temperature(100)
      Dim formats() As String = { "C", "G", "F", "K" } 

      ' Call Display method with a string array.
      Console.WriteLine("Calling Display with a string array:")
      temp1.Display(formats)
      Console.WriteLine()
      
      ' Call Display method with individual string arguments.
      Console.WriteLine("Calling Display with individual arguments:")
      temp1.Display("C", "F", "K", "G")
      Console.WriteLine()
      
      ' Call parameterless Display method.
      Console.WriteLine("Calling Display with an implicit parameter array:")
      temp1.Display()
   End Sub
End Module
' The example displays the following output:
'       Calling Display with a string array:
'       100.00  °C
'       100.00  °C
'       212.00  °F
'       373.15  °K
'       
'       Calling Display with individual arguments:
'       100.00  °C
'       212.00  °F
'       373.15  °K
'       100.00  °C
'       
'       Calling Display with an implicit parameter array:
'       100.00  °C

注釈

ParamArrayAttribute は、メソッドパラメーターがパラメーター配列であることを示します。The ParamArrayAttribute indicates that a method parameter is a parameter array. パラメーター配列では、不明な数の引数を指定できます。A parameter array allows the specification of an unknown number of arguments. パラメーター配列は、仮パラメーターリストの最後のパラメーターである必要があり、1次元配列である必要があります。A parameter array must be the last parameter in a formal parameter list, and it must be a single-dimension array. メソッドが呼び出されると、パラメーター配列は、次の2つの方法のいずれかで、メソッドへの引数を指定できます。When the method is called, a parameter array permits arguments to a method to be specified in either of two ways:

  • パラメーター配列型に暗黙的に変換できる型の単一の式として。As a single expression of a type that is implicitly convertible to the parameter array type. パラメーター配列は、値パラメーターとして機能します。The parameter array functions as a value parameter.

  • 0個以上の引数として。各引数は、パラメーター配列要素の型に暗黙的に変換できる型の式です。As zero or more arguments, where each argument is an expression of a type that is implicitly convertible to the type of the parameter array element.

次のセクションの例では、両方の呼び出し規約について説明します。The example in the next section illustrates both calling conventions.

注意

通常、ParamArrayAttribute はコード内で直接使用されません。Typically, the ParamArrayAttribute is not used directly in code. 代わりに、Visual Basic 内の ParamArray やのC#params など、個々の言語キーワードが ParamArrayAttribute クラスのラッパーとして使用されます。Instead, individual language keywords, such as ParamArray in Visual Basic and params in C#, are used as wrappers for the ParamArrayAttribute class. などの一部の言語C#では、言語キーワードを使用する必要があり、ParamArrayAttributeの使用が禁止されている場合もあります。Some languages, such as C#, may even require the use of the language keyword and prohibit the use of ParamArrayAttribute.

オーバーロードの解決中に、パラメーター配列をサポートするコンパイラが、存在しないが、パラメーター配列を含むオーバーロードよりも1つ小さいパラメーターを持つメソッドオーバーロードを検出すると、メソッドは、を含むオーバーロードに置き換えられます。パラメーター配列。During overload resolution, when compilers that support parameter arrays encounter a method overload that does not exist but has one fewer parameter than an overload that includes a parameter array, they will replace the method with the overload that includes the parameter array. たとえば、String.Split() インスタンスメソッド (String クラスには存在しません) への呼び出しは、String.Split(Char[]) メソッドの呼び出しとして解決されます。For example, a call to the String.Split() instance method (which does not exist in the String class) is resolved as a call to the String.Split(Char[]) method. また、コンパイラは、必要な型の空の配列をメソッドに渡します。The compiler will also pass an empty array of the required type to the method. これは、パラメーター配列内の要素を処理するときに、長さが0の配列を処理するために、メソッドを常に準備する必要があることを意味します。This means that the method must always be prepared to handle an array whose length is zero when it processes the elements in the parameter array. 具体的な例を次に示します。The example provides an illustration.

属性の使用方法の詳細については、「属性」を参照してください。For more information about using attributes, see Attributes.

コンストラクター

ParamArrayAttribute()

ParamArrayAttribute クラスの新しいインスタンスを、既定のプロパティを使用して初期化します。Initializes a new instance of the ParamArrayAttribute class with default properties.

プロパティ

TypeId

派生クラスで実装されると、この Attribute の一意の識別子を取得します。When implemented in a derived class, gets a unique identifier for this Attribute.

(継承元 Attribute)

メソッド

Equals(Object)

このインスタンスが、指定されたオブジェクトと等価であるかどうかを示す値を返します。Returns a value that indicates whether this instance is equal to a specified object.

(継承元 Attribute)
GetHashCode()

このインスタンスのハッシュ コードを返します。Returns the hash code for this instance.

(継承元 Attribute)
GetType()

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(継承元 Object)
IsDefaultAttribute()

派生クラスでオーバーライドされるとき、このインスタンスの値が派生クラスの既定値であるかどうかを示します。When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(継承元 Attribute)
Match(Object)

派生クラス内でオーバーライドされたときに、指定したオブジェクトとこのインスタンスが等しいかどうかを示す値を返します。When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(継承元 Attribute)
MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(継承元 Object)
ToString()

現在のオブジェクトを表す string を返します。Returns a string that represents the current object.

(継承元 Object)

明示的なインターフェイスの実装

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

一連の名前を対応する一連のディスパッチ識別子に割り当てます。Maps a set of names to a corresponding set of dispatch identifiers.

(継承元 Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

オブジェクトの型情報を取得します。この情報はインターフェイスの型情報の取得に使用できます。Retrieves the type information for an object, which can be used to get the type information for an interface.

(継承元 Attribute)
_Attribute.GetTypeInfoCount(UInt32)

オブジェクトが提供する型情報インターフェイスの数 (0 または 1) を取得します。Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(継承元 Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

オブジェクトによって公開されたプロパティおよびメソッドへのアクセスを提供します。Provides access to properties and methods exposed by an object.

(継承元 Attribute)

適用対象

こちらもご覧ください