0

public object LastControlカスタムクラスを含むものがあり、そのうちのいくつかにはResize()メソッドがあります。現在の値がこのメソッドを持つクラスのものであるかどうかを確認し、その場合はそれを実行する方法を知りたいです。

LastControl.Resize()現在のところ、型オブジェクト自体にそのメソッドがないため、コンパイルしようとするとエラーが発生します。コントロールクラスとしてキャストするのは簡単な解決策かもしれませんが、複数のクラスがあるので、ここで何をすべきかわかりません。GetTypeなんらかの方法で使用することから始めるべきだと思いました。

4

1 に答える 1

5

でほのめかしたように、リフレクションベースの方法では、メソッドGetTypeを使用します。これを使用して、メソッドを呼び出してメソッドを実行できるインスタンスを取得できます。GetMethodMethodInfoInvoke

Resize()ただし、よりクリーンな方法は、メソッドを提供するインターフェイスを宣言することです。

public interface IResizeable
{
    void Resize();
}

メソッドを持つ任意のカスタム クラスで、Resize()そのインターフェイスを実装できます。次に、 の現在の値にメソッドLastControlがあるかどうかを確認するためResize()に、 を使用してオブジェクトのキャストを試みますas。結果が でない場合は、メソッドnullを安全に呼び出すことができます。Resize()

IResizeable resizeable = LastObject as IResizeable;
if (resizeable != null) {
    resizeable.Resize();
}
于 2012-08-26T17:39:47.900 に答える