0
私のケースは少し複雑ですので、例を使って説明します。ここで別のDLLで定義されたインターフェイスを実装するクラスメソッドを取得します。
は、私の場合です:
fileA.cs
:
namespace companyA.testA
{
public interface ITest
{
int Add(int a, int b);
}
}
注:fileA.cs
はfileA.dll
fileB.cs
にコンパイルされます。
namespace companyA.testB ////note here a different namespace
{
public class ITestImplementation: ITest
{
public int Add(int a,int b)
{
return a+b;
}
}
}
注:fileB.cs
はfileB.dll
にコンパイルされます。
今私はrun.cs
を持っている:
using System.Reflection;
public class RunDLL
{
static void Main(string [] args)
{
Assembly asm;
asm = Assembly.LoadFrom("fileB.dll");
//Suppose "fileB.dll" is not created by me. Instead, it is from outside.
//So I do not know the namespace and class name in "fileB.cs".
//Then I want to get the method "Add" defined in "fileB.cs"
//Is this possible to do?
}
}
あり、ここでの回答(Getting all types that implement an interface)です:
//answer from other thread, NOT mine:
var type = typeof(IMyInterface);
var types = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(s => s.GetTypes())
.Where(p => type.IsAssignableFrom(p));
は、しかし、私の場合で作業することはできないようです。
あなたの最後のコード例はIMyInterfaceというを使用しているが、これは前の例では何と相関しません。 –
@JonathonChase最後のコードは私のものではありません。混乱の場合にコメントを追加しました。ありがとう。 – derek
@derekだから、IMyInterfaceの代わりにvar type = typeof(ITest); ? – TlonXP