IsValueType プロパティを実装し、 Type が値型であり、クラスやインターフェイスでないかどうかを判断します。
Protected Overridable Function IsValueTypeImpl() As Boolean
[C#]
protected virtual bool IsValueTypeImpl();
[C++]
protected: virtual bool IsValueTypeImpl();
[JScript]
protected function IsValueTypeImpl() : Boolean;
戻り値
Type が値型である場合は true 。それ以外の場合は false 。
解説
値型とは、ビットの連続で表される値のことです。値型は、クラスやインターフェイスではありません。この値型は、一部のプログラミング言語では "構造体" と呼ばれます。列挙型 (Enum) は値型の 1 つです。
使用例
Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic
Public Class MyTypeDelegator
Inherits TypeDelegator
Public myElementType As String = Nothing
Private myType As Type = Nothing
Public Sub New(myType As Type)
MyBase.New(myType)
Me.myType = myType
End Sub 'New
' Override the IsValueTypeImpl() method of the Type class.
Protected Overrides Function IsValueTypeImpl() As Boolean
' Determine whether the type is a value type.
If myType.IsValueType Then
myElementType = "value"
Return True
End If
' The type is not a value type.
Return False
End Function 'IsValueTypeImpl
End Class 'MyTypeDelegator
Public Class Type_IsValueTypeImpl
Public Class MyClass1
End Class 'MyClass1
Public Shared Sub Main()
Try
Dim myInt As Integer = 0
Dim myClass1 As New MyClass1()
Dim myType As New MyTypeDelegator(myInt.GetType())
Console.WriteLine(ControlChars.NewLine + "Determine whether a variable refers to a value type." + ControlChars.NewLine)
' Determine whether 'myType' is a value type.
If myType.IsValueType Then
Console.WriteLine(ControlChars.NewLine + "'myInt' is a {0} type.", myType.myElementType)
Else
Console.WriteLine(ControlChars.NewLine + "'myInt' is not a value type.")
End If
myType = New MyTypeDelegator(myClass1.GetType())
' Determine whether 'myType' is a value type.
If myType.IsValueType Then
Console.WriteLine(ControlChars.NewLine + "'myClass1' is a {0} type.", myType.myElementType)
Else
Console.WriteLine(ControlChars.NewLine + "'myClass1' is not a value type.")
End If
Catch e As Exception
Console.WriteLine(ControlChars.NewLine + "The following exception is raised:" + e.Message.ToString())
End Try
End Sub 'Main
End Class 'Type_IsValueTypeImpl
[C#]
using System;
using System.Reflection;
public class MyTypeDelegator : TypeDelegator
{
public string myElementType = null;
private Type myType = null ;
public MyTypeDelegator(Type myType) : base(myType)
{
this.myType = myType;
}
// Override 'IsValueTypeImpl()' method of 'Type' class.
protected override bool IsValueTypeImpl()
{
// Determine whether the type is a value type.
if(myType.IsValueType)
{
myElementType = "value";
return true;
}
// The type is not value type.
return false;
}
}
public class Type_IsValueTypeImpl
{
public class MyClass
{
}
public static void Main()
{
try
{
int myInt = 0 ;
MyClass myClass = new MyClass ();
MyTypeDelegator myType = new MyTypeDelegator(myInt.GetType());
Console.WriteLine("\nCheck whether a variable refers to a value type.\n");
// Determine whether 'myType' is a value type.
if( myType.IsValueType)
Console.WriteLine("\n'myInt' is a {0} type.", myType.myElementType);
else
Console.WriteLine("\n'myInt' is not a value type.");
myType = new MyTypeDelegator(myClass.GetType());
// Determine whether 'myType' is a value type.
if( myType.IsValueType)
Console.WriteLine("\n'myClass' is a {0} type.", myType.myElementType);
else
Console.WriteLine("\n'myClass' is not a value type.");
}
catch( Exception e )
{
Console.WriteLine("\nThe following exception is raised:" +e.Message);
}
}
}
[C++]
#using <mscorlib.dll>
using namespace System;
using namespace System::Reflection;
public __gc class MyTypeDelegator : public TypeDelegator {
public:
String* myElementType;
private:
Type* myType;
public:
MyTypeDelegator(Type* myType) : TypeDelegator(myType) {
this->myType = myType;
}
// Override 'IsValueTypeImpl()' method of 'Type' class.
protected:
bool IsValueTypeImpl() {
// Determine whether the type is a value type.
if (myType->IsValueType) {
myElementType = S"value";
return true;
}
// The type is not value type.
return false;
}
};
public __gc class MyClass {
};
int main() {
try {
int myInt = 0 ;
MyClass* myClass = new MyClass ();
MyTypeDelegator* myType = new MyTypeDelegator( __box(myInt)->GetType());
Console::WriteLine(S"\nCheck whether a variable refers to a value type.\n");
// Determine whether 'myType' is a value type.
if (myType->IsValueType)
Console::WriteLine(S"\n'myInt' is a {0} type.", myType->myElementType);
else
Console::WriteLine(S"\n'myInt' is not a value type.");
myType = new MyTypeDelegator(myClass->GetType());
// Determine whether 'myType' is a value type.
if (myType->IsValueType)
Console::WriteLine(S"\n'myClass' is a {0} type.", myType->myElementType);
else
Console::WriteLine(S"\n'myClass' is not a value type.");
} catch (Exception* e) {
Console::WriteLine(S"\nThe following exception is raised: {0}", e->Message);
}
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET
参照
Type クラス | Type メンバ | System 名前空間 | TypeAttributes | IsClass | IsInterface | ValueType | IsValueType