xmlns

XAMLにおけるキーワードについて扱っていく。

XAML 名前空間および WPF XAML の名前空間の割り当て | Microsoft Docs
XAMLの基礎(1/2) - @IT

xmlnsは、XAMLに限らず、XMLにおいてはデフォルトの名前空間を指す。

XML名前空間の簡単な説明

WPFアプリケーション
WPFアプリケーション

WPFアプリケーションで、

XAMLのWindowタグ
XAMLのWindowタグ

XAMLのWindowタグの属性にxmlnsがある。

もし、このxmlns属性を取り除くと、

Windowタグが認識できない
Windowタグが認識できない

Windowタグが認識できない。

Gridタグも認識できない
Gridタグも認識できない

Gridタグも認識できない。

Titleも解決できない
Titleも解決できない

ビルドすると、ビルドエラー。
名前空間が設定されないので、Titleなどあらゆるキーワードが使えない。

元に戻す
元に戻す

元に戻すと青線も消える。

ビルドも通る
ビルドも通る

ビルドも通る。

デフォルトの名前空間xmlnsにはWPF名前空間である
"http://schemas.microsoft.com/winfx/2006/xaml/presentation"を指すようにしておかないといけないことがわかる。
(WPFというかSilverlightもだが)

Sample/wpf/xmlns/xmlns/src/xmlns at master · bg1bgst333/Sample · GitHub

MethodInfo.Invoke

MethodInfo.Invokeで、MethodInfoオブジェクトの指すメソッドは実行される。

MethodInfo.Invoke(Object, Object[]) Method (System.Reflection) | Microsoft Docs
動的にDLLファイルのクラスメソッドを呼び出す (Reflectionを用いたアセンブリの動的呼び出し) (C#プログラミング)

getString.InvokeにActivator.CreateInstanceで生成したobjとnull(本来は引数を渡すのだが今回のメソッドにはないのでnullとする。)を渡す。
あとは戻り値retを出力。

asm = ClassLibrary, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
type = BGST.ClassLibraryClass
obj = BGST.ClassLibraryClass
getString = System.String GetString()
ret = ABC
続行するには何かキーを押してください . . .

ClassLibraryClassのGetStringの仕様通りに、"ABC"が返ってきた。

Sample/dotnet/MethodInfo/Invoke/src/MethodInfo_ at master · bg1bgst333/Sample · GitHub

MethodInfo

MethodInfoは、メソッド情報を持つ。

MethodInfo Class (System.Reflection) | Microsoft Docs

取得したメソッド情報の一部を出力してみる。

空のプロジェクト
空のプロジェクト

空のプロジェクト。

MainClass.cs
MainClass.cs

MainClass.cs。

publicなのか、staticなのか、メソッド名、戻り値型などを出力。

DLLを置く
DLLを置く

DLLを置く。

Releaseにも
Releaseにも

Releaseにも。

asm = ClassLibrary, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
type = BGST.ClassLibraryClass
obj = BGST.ClassLibraryClass
getString = System.String GetString()
getString.IsPublic = True
getString.IsStatic = False
getString.Name = GetString
getString.ReturnType = System.String
続行するには何かキーを押してください . . .

publicではあるが、staticではない、GetStringというメソッド名で、戻り値はSystem.String。

Sample/dotnet/MethodInfo/MethodInfo/src/MethodInfo_ at master · bg1bgst333/Sample · GitHub

Type.GetMethod

Type.GetMethodは、指定のメソッド名のメソッド情報を取得する。

Type.GetMethod Method (System) | Microsoft Docs

ClassLibraryClassのGetStringのメソッド情報を取得できるか。

空のプロジェクト
空のプロジェクト

空のプロジェクト。

MainClass.cs
MainClass.cs

MainClass.cs。

type.GetMethodで"GetString"の情報を取得、MethodInfoのgetStringに格納。

DLLを置く
DLLを置く

DLLを置く。

Releaseにも
Releaseにも

Releaseにも。

asm = ClassLibrary, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
type = BGST.ClassLibraryClass
obj = BGST.ClassLibraryClass
getString = System.String GetString()
続行するには何かキーを押してください . . .

getStringの出力から、System.Stringが戻り値で、GetStringというメソッド名であることが、わかる。

Sample/dotnet/Type/GetMethod/src/Type_ at master · bg1bgst333/Sample · GitHub

Activator.CreateInstance

Activator.CreateInstanceは、指定された型のオブジェクトインスタンスを生成する。

Activator.CreateInstance Method (System) | Microsoft Docs
動的にDLLファイルのクラスメソッドを呼び出す (Reflectionを用いたアセンブリの動的呼び出し) (C#プログラミング)

これで生成されたオブジェクトがどうなってるか確認する。

空のプロジェクト
空のプロジェクト

空のプロジェクト。

MainClass.cs
MainClass.cs

MainClass。

Activator.CreateInstanceにtypeを渡して、生成されたobjをそのまま出力。

DLLを置く
DLLを置く

DLLを置く。

Releaseにも
Releaseにも

Releaseにも。

asm = ClassLibrary, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
type = BGST.ClassLibraryClass
obj = BGST.ClassLibraryClass
続行するには何かキーを押してください . . .

objが"BGST.ClassLibraryClass"のオブジェクトであると示している。

Sample/dotnet/Activator/CreateInstance/src/Activator_ at master · bg1bgst333/Sample · GitHub

Module.GetType

Module.GetTypeは、モジュールから指定された型(クラス)名のTypeを取得。

Module.GetType Method (System.Reflection) | Microsoft Docs

これもType.GetTypeのオーバーロード

空のプロジェクト
空のプロジェクト

空のプロジェクト。

MainClass.cs
MainClass.cs

MainClass.cs。

mod.GetTypeでtypeを取得。
modを取得する分、手間はかかる。

DLLを置く
DLLを置く

DLLを置く。

Releaseにも
Releaseにも

Releaseにも。

asm = ClassLibrary, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
mod = ClassLibrary.dll
type = BGST.ClassLibraryClass
続行するには何かキーを押してください . . .

変わらない。

Sample/dotnet/Module/GetType/src/Module_ at master · bg1bgst333/Sample · GitHub

Assembly.GetType

Assembly.GetTypeは、アセンブリから指定された型(クラス)名のTypeを取得。

Assembly.GetType Method (System.Reflection) | Microsoft Docs

Type.GetTypeのオーバーロードメソッドだと思うが、別に定義されているようなので。

空のプロジェクト
空のプロジェクト

空のプロジェクト。

MainClass.cs
MainClass.cs

MainClass.csを追加。

asm.GetTypeで"BGST.ClassLibraryClass"のtypeを取得。

DLLを置く
DLLを置く

DLLを置く。

Releaseビルドの場所にも
Releaseビルドの場所にも

Releaseビルドの場所にも。

asm = ClassLibrary, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
type = BGST.ClassLibraryClass
続行するには何かキーを押してください . . .

typeが"BGST.ClassLibraryClass"となっているので、取得できている。

Sample/dotnet/Assembly/GetType/src/Assembly_ at master · bg1bgst333/Sample · GitHub