私はコマンドライン引数として動詞を与えて、いくつかの個別タスクの1つを実行できるコマンドラインアプリケーションを持っています。各タスクはクラスによって処理され、それぞれはメソッドExecute()
を含むインタフェースを実装します。 if文やswitch文を使わずにこれをやろうとしています。これまでのところ、私が持っていることはこれです: 実行時に指定されたクラスをインスタンス化し、そのインスタンスのメソッドを呼び出すには、より良い方法はありますか?
var taskTypeName = $"MyApp.Tasks.{invokedVerb}Task";
var taskType = Type.GetType(taskTypeName, false);
var task = Activator.CreateInstance(taskType) as IMaintenanceTask;
task.Execute();
task
IMaintenanceTask
、です。私は
dynamic
を避けることを好むでしょう - 私が理解していることは、一度しか使われていなければ、ここでのように、キャッシングのメリットが見えず、より少ないキーストロークで反射することです。
このアプローチ(または同じ行に沿ったもの)がパフォーマンスに顕著に影響する可能性がありますか?私はそれが間違いなくランタイム例外/バグの可能性を増やすことは知っていますが、それはこのアプリケーションがスクリプトを介してのみ実行されるという事実によって部分的に緩和されています。予測可能な入力のみを処理します - これは動的に動作するコード内の唯一の場所になります。私は賢明に達成しようとしていますか?または、入力を切り替えて、通常のコンパイル時のコンストラクタを使用して各タイプのタスクを構築し、その上で.Execute()を呼び出すだけで、これを通常の方法で退屈な方法で行うほうがよいでしょう。
'IsAssignableFrom()私はこのコードで私を快適にすることを約知るために必要な正確な機能である'、私はあなたがあまりにも頻繁にコマンドを使用しようとしている場合は – Toadfish
、あなたは簡単に '辞書内のインスタンスをキャッシュすることができると思います ' –