1

簡単に言えば、私がやっていることは、他のフレームワークの実装者のために、いくつかの貴重なフレームワーク機能を備えた「Shape パッケージ」を効果的に作成することです。Shape パッケージをクラス ライブラリにパッケージ化し、テスト実装の作成に進みます。Shape パッケージ .dll を動的に読み込み、アセンブリから型を反映します。オブジェクトを作成したり、DataGridViews にデータをバインドしたり、好きなものを作成したりできますが、次のような単純なチェックに合格することはできません

if (squareObject is Shape)
or
if (Square.IsSubclassOf(Shape))

例として-1つのクラスを持つクラスライブラリがある場合:

namespace Shapes
{
    public class Shape
    {
        public string UsefulShapeProperty { get; set; }
    }
}

次に、1 つのクラス (Shapes ライブラリを参照) を持つ実装ライブラリを作成します。

namespace MyShapes
{
    public class UselessShape : Shapes.Shape
    {
        public string Description { get; set; }
    }
}

最後に、Shapes ライブラリを参照し、MyShapes などの実装ライブラリを動的に読み込む 3 番目のプロジェクトを作成します。

using Shapes;
public class ShapeChecker
{
    ... (Constructor, some means to load and reflect the types from UselessShapes.dll, omitted for brevity and clarity)
    public void Report(Type typeToCheck)
    {
        if (typeToCheck.IsSubclassOf(typeof(Shapes.Shape)))
            Console.WriteLine("Rejoice, for " + typeToCheck.ToString() + " is a Shape!");
    }
}

私は決して「喜ぶ」には至りません。Activator.CreateInstance も使用し、返されたオブジェクトもチェックしました。Activator は UselessShape オブジェクトを提供しますが、型チェックは失敗します。

MyShapes パッケージについて特別なことを知るために ShapeChecker を必要としないように、動的に読み込まれたアセンブリで特定の既知の型 (Shape など) の実装を確認するにはどうすればよいですか?

4

1 に答える 1