3ds Max 9 以降では、dotNetClass
は DotNet の System::Type
をラップし、クラスに関連する静的プロパティ、メソッド、およびイベントを、反映(リフレクション)によって公開します。
プロパティ アクセスには、MAXScript の数値データ タイプ(必要に応じて桁数を調整)、文字列、ブール値、dotNetControl、dotNetObject、dotNetClass の各値が使用されます。プロパティに対するアクセスには、通常のプロパティ アクセスの指定[control.property]、および getProperty()
/ setProperty()
メソッドが使用されます。
クラス メソッドにアクセスすると、dotNetMethod インスタンスが作成されるか、オプションとして RuntimeMethodInfo インスタンスをラッピングする dotNetObject が作成されます。
イベント ハンドラの追加および管理には新しいメソッドが使用されます。イベントが発生すると、これらの新しいメソッドは呼び出すべきコールバック関数の登録および登録解除を行います。コールバック関数に渡される引数には、クラス、イベント名、イベント ハンドラによって渡された引数などがあります。詳細は、「dotNet 構造体のメソッド」を参照してください。
同じタイプをラップする場合でも、dotNetClass と dotNetObject では違いがあります。
dotNetClass にアクセスする場合は System::Type にアクセスすることになりますが、dotNetObject の場合は System::Type によって記述されたオブジェクト タイプにアクセスします。
このため、たとえばある dotNetObject に対して showProperties() を呼び出した場合、この dotNetObject がラップする System::Type のプロパティを取得できますが、同じタイプをラップする dotNetClass に対して showProperties() を呼び出した場合は、System::Type 自体のプロパティを取得できます。
コンストラクタ:
dotNetClass {<dotNetObject> | <dotNetControl> | <class_type_string> | <c_sharp_type_string> }
dotNetClass オブジェクトを構築します。引数が dotNetObject または dotNetControl オブジェクトである場合は、dotNetClass はそのオブジェクトの System::Type をラップします。引数が文字列である場合は、MXS はその文字列を System::Type 名として解決しようと試みます。
例:
theClass = dotNetClass "System.Drawing.Size"
解決までに使用されるステップ:
1. 完全な修飾名として解決を試みます。完全な修飾名とは、クラス名とアセンブリ名を含んでいるものです。
例
dotNetClass "System.Windows.Forms.MonthCalendar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
2. 現在の AppDomain にロードされている個々のアセンブリ内の名前を検索することによって、クラス名として解決を試みます。
3. 一致するものが見つからなかった場合は、名前の先頭に「System.」を付加して、さらに解決を試みます。
4. 一致するものが見つからなかった場合は、名前の先頭に「System.Windows.Forms.」を付加して、 さらに解決を試みます。
5. 最後に、C# 組み込みのデータ タイプ名と、それに対応する .NET システム タイプとの一致を試みます。マッピングは以下のとおりです。
C# 組み込みのタイプ名 | .NET Framework のタイプ |
---|---|
bool |
System.Boolean |
byte |
System.Byte |
sbyte |
System.SByte |
char |
System.Char |
decimal |
System.Decimal |
float |
System.Single |
int |
System.Int32 |
uint |
System.UInt32 |
long |
System.Int64 |
ulong |
System.UInt64 |
object |
System.Object |
short |
System.Int16 |
ushort |
System.UInt16 |
string |
System.String |
type = dotnetclass "bool[]" --> dotNetClass:System.Boolean[]
v = dotnet.ValueToDotNetObject #(false,true) type --> dotNetObject:System.Boolean[]
v.get 0 --> false
type = dotnetclass "byte[]" --> dotNetClass:System.Byte[]
v = dotnet.ValueToDotNetObject #(1,2) type --> dotNetObject:System.Byte[]
v.get 0 --> 1
type = dotnetclass "char[]" --> dotNetClass:System.Char[]
v = dotnet.ValueToDotNetObject #("A","B") type --> dotNetObject:System.Char[]
v.get 0 --> "A"
アセンブリは、現在の AppDomain にロードできます。「dotNet 構造体のメソッド」の dotNet.LoadAssembly()
メソッドを参照してください。
dotNetClass 自体によって公開されるメソッドを使用して現在の AppDomain にアセンブリを追加するには、次の例のようにします。
例
assembly = dotNetClass "System.Reflection.Assembly" r = assembly.loadfrom "F:\\FlashTrackBar\\bin\\Debug\\FlashTrackBar.dll"
一度ロードしたアセンブリをロード解除することはできません。
メソッド:
getProperty <dotNetClass> <prop name> [asDotNetObject:<boolean>]
指定されたプロパティの値を返します。
asDotNetObject が false(既定値)の場合は、この値は可能ならネイティブ MAXScrript 値に変換され、true の場合は、この値は dotNetControl または dotNetObject の値として返されます。
Type.MakeGenericType()
メソッドを使用すると、クラスの静的な汎用メソッドにアクセスできます。このメソッドの実行例については、「dotNet 汎用クラス」トピックを参照してください。asDotNetObject
が true の場合でも、指定したプロパティがメソッドである場合は dotNetMethod を返していました。例:
o = dotNetClass "System.String" -- o has only one property, .Empty: prop = getProperty o "Empty"
setProperty <dotNetClass> <prop name> <value>
指定されたプロパティの値を設定します。
指定された値がネイティブ MAXScript 値である場合は、この値は可能であれば適切な DotNet 値に変換されます。
getPropNames <dotNetClass> [showStaticOnly:<boolean>] [declaredOnTypeOnly:<boolean>]
クラスによって公開されるプロパティ名の配列を返します。
showStaticOnly:
が true (既定値)の場合は静的プロパティのみが表示され、false の場合は静的プロパティとインスタンス プロパティが表示されます。
declaredOnTypeOnly:
が true の場合は、指定したクラスについて宣言されているプロパティのみが表示され、false (既定値)の場合は指定したクラスおよびそのクラスから派生したクラスのプロパティが表示されます。
このメソッドの結果は、名前でソートされます。実際に返されるプロパティには、DotNet でいうプロパティとフィールドの 2 つの内容が含まれています。最初にプロパティがソート順に表示され、続いてフィールドがソート順に表示されます。
showProperties <dotNetClass> ["prop_pat"] [to:<stream>] [showStaticOnly:<boolean>] [showMethods:<boolean>] [showAttributes:<boolean>] [declaredOnTypeOnly:<boolean>]
プロパティ パターン(prop_pat)に一致する名前を持ったクラスによって公開されるプロパティを表示します。
to
が指定されていない場合はリスナーに出力され、それ以外の場合は指定されたストリームに出力されます。
showStaticOnly:
が true (既定値)の場合は静的プロパティのみが表示され、false の場合は静的プロパティとインスタンス プロパティが表示されます。
showMethods:
が true の場合は、get メソッドおよび set メソッドのシグネチャ(存在する場合)が表示されます。既定値は false です。
showAttributes:
が true の場合は、プロパティに関連付けられているアトリビュートが表示されます。既定値は false です。
declaredOnTypeOnly:
が true の場合は、指定したクラスについて宣言されているプロパティのみが表示され、false (既定値)の場合は指定したクラスおよびそのクラスから派生したクラスのプロパティが表示されます。
このメソッドの結果は、名前でソートされます。実際に返されるプロパティには、DotNet でいうプロパティとフィールドの 2 つの内容が含まれています。最初にプロパティがソート順に表示され、続いてフィールドがソート順に表示されます。
showMethods <dotNetClass> ["prop_pat"] [to:<stream>] [showStaticOnly:<boolean>] [showSpecial:<boolean>] [showAttributes:<boolean>] [declaredOnTypeOnly:<boolean>]
プロパティ パターン(prop_pat)に一致する名前を持ったクラスによって公開されるメソッドを表示します。
prop_pat
はパターン文字列です。この文字列に含めることができる特殊文字の詳細については、「パターン文字列」を参照してください。
to
が指定されていない場合はリスナーに出力され、それ以外の場合は指定されたストリームに出力されます。
showStaticOnly:
が true (既定値)の場合は静的プロパティのみが表示され、false の場合は静的プロパティとインスタンス プロパティが表示されます。
showSpecial:
が true の場合は、通常はユーザによって呼び出されることのないメソッド(プロパティ値を設定するためのメソッドやイベント ハンドラを起動するためのメソッド)が表示されます。既定値は false です。
showAttributes:
が true の場合は、プロパティに関連付けられているアトリビュートが表示されます。既定値は false です。
declaredOnTypeOnly:
が true の場合は、指定したクラスについて宣言されているプロパティのみが表示され、false (既定値)の場合は指定したクラスおよびそのクラスから派生したクラスのプロパティが表示されます。
結果は、名前でソートされます。ソートにおいて名前の次に優先されるのは、パラメータの数です。
showEvents<dotNetClass> ["prop_pat"] [to:<stream>] [showStaticOnly:<boolean>] [declaredOnTypeOnly:<boolean>]
プロパティ パターン(prop_pat)に一致する名前を持ったクラスによって公開されるイベントを表示します。
prop_pat
はパターン文字列です。この文字列に含めることができる特殊文字の詳細については、「パターン文字列」を参照してください。
to
が指定されていない場合はリスナーに出力され、それ以外の場合は指定されたストリームに出力されます。
showStaticOnly:
が true (既定値)の場合は静的プロパティのみが表示され、false の場合は静的プロパティとインスタンス プロパティが表示されます。
declaredOnTypeOnly:
が true の場合は、指定したクラスについて宣言されているプロパティのみが表示され、false (既定値)の場合は指定したクラスおよびそのクラスから派生したクラスのプロパティが表示されます。
結果は、名前でソートされます。
dotNet.showConstructors <dotNetClass> [to:<stream>]
このクラスによって公開されるコンストラクタを表示します。
to
が指定されていない場合はリスナーに出力され、それ以外の場合は指定されたストリームに出力されます。
結果は、名前でソートされます。ソートにおいて名前の次に優先されるのは、パラメータの数です。