TypeForwardedToAttribute使ってみる
オライリー本読んでたら見慣れないキーワードが出てきたので使ってみた。
どうも日本語の情報がなかなか見当たらないんだ、、、、、まぁいいけど。
- アセンブリは Libarary1
namespace ForwardTest { public class SampleForward { public string Message(string keyword) { return "hello " + keyword; } } }
こんな風に使うアプリを用意する。
namespace UsingAppConsole { class Program { static void Main(string[] args) { SampleForward forwards = new SampleForward(); Console.WriteLine(forwards.Message("azalea")); Console.ReadLine(); } } }
ここまではいつも通りか?
もうひとつプロジェクト作って、DLLを作る。アセンブリは Library2 で、中身は
namespace ForwardTest { public class SampleForward { public string Message(string keyword) { return "hello " + keyword + ", how are you?"; } } }
としとく。
ここで、最初の dll 作ったプロジェクトに戻って、2つ目のライブラリに参照をかける。
で、最初に作ったほうのクラスをコメントアウトして、 AssemblyInfo.cs に次の行を記入。
[assembly: TypeForwardedTo(typeof(ForwardTest.SampleForward))]
その上で dll をビルドして、アプリケーション側にコピー、実行する。
すると、実行結果が
hello azalea, how are you?
要するに外部 dll で指定して定義を別 dll の定義に転送できるという仕組みかっ。
ちなみにこの状態で、アプリ側を再ビルドしようとすると、「んなクラス参照ねーよ」と怒られる。
コンパイルできないくせに普通に動く、、、、キモス
古いロジックから新しいロジックに転送とか、そういう使い方するのかねぇ、、、、。
用途が限定的で、別名前空間から突っ込むとかできなかった。
あれか、アプリのテスト動作のときに、デバッグ用DLL吸わせて動かすとか、そういう用途で使えそうね。