私はいくつかのSQLファイルを処理するための基本的なC#アプリを持っています。私は、proc、関数、ビューなどのオブジェクトの種類ごとにクラスを持っています。同じメソッドを持つ任意のクラスにできるオブジェクトを1つ作成するにはどうすればよいですか?
私が主にしたいのは、どのような種類のスクリプトファイルが処理され、それらのクラスのインスタンスを作成するかを決定することです。
次に、そのオブジェクトを使用して、objSqlTypeと呼んで、基本クラスのメソッドを呼び出したいとします。各クラスはgetHeader()、getPermissions()などのように実装された同じメソッド名を持ちます
これは可能です。私は、例えば
、メソッドを作成するために私を強制しますが、単一のオブジェクトを使用するように見えることはできませんどのインターフェイスを見て:
object objSqlType;
switch (type)
{
case ObjectType.PROC:
objSqlType = new SqlProc();
break;
case ObjectType.FUNCTION:
objSqlType = new SqlFunction();
break;
case ObjectType.VIEW:
objSqlType = new SqlView();
break;
default:
break;
}
string header = objSqlType.getHeader(); // call getHeader for whichever object I created
[反射を使用してmethを呼び出す方法od by name](http://stackoverflow.com/questions/3110280/how-to-use-reflection-to-call-method-by-name)、それはあなたがメソッド名を知っていればそれを行うべきであり、すべての型はそれを持っています(メソッドが他に存在するかどうかを確認できます)。デザインの観点からは、ただし、インターフェイスを使用する必要があります(オブジェクトが似ている場合は基本クラス)。 – Sinatr
の代わりに 'object objSqlType;' yourInterface objSqlType;を使用してください。おそらく、インターフェイスの代わりに基本クラスを使用することを検討してください。 – Ondra
汎用オブジェクトMainObjectを作成します。ここで、Tはfunc、proc、viewのいずれかのクラスになります。これらのクラスはすべて同じインタフェースIMyInterfaceを実装します。'class MainObject ここで、T:IMyInterface {public T myObject {get; set;} ...}'。 –
CFreitas