技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

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吸わせて動かすとか、そういう用途で使えそうね。