はのは、私が特定のメソッドシグネチャに従うメソッドを実行する方法はありますか?
public delegate DataSet AutoCompleteDelegate(
string filter, long rowOffset);
私はそのメソッドシグネチャを強制するために以下のクラスを作ることができるとしましょうか? (ただ呼び起こさアイデア):
public class MiddleTier
{
[Follow(AutoCompleteDelegate)]
public DataSet Customer_AutoComplete(string filter, long rowOffset)
{
var c = Connect();
// some code here
}
[Follow(AutoCompleteDelegate)]
public DataSet Item_AutoComplete(string filter, long rowOffset)
{
var c = Connect();
// some code here
}
// this should give compilation error, doesn't follow method signature
[Follow(AutoCompleteDelegate)]
public DataSet BranchOffice_AutoComplete(string filter, string rowOffset)
{
var c = Connect();
// some code here
}
}
[EDIT]
目的:私はすでに私からミドルティアの方法で属性を置きます。 、インターフェースによって促進さ((属性は、ここで多くのことができます)、その後、Winフォームのデリゲート機能にそれらをマッピング
public abstract class MiddleTier : MarshalByRefObject
{
// Operation.Save is just an enum
[Task("Invoice", Operation.Save)]
public Invoice_Save(object pk, DataSet delta);
[Task("Receipt", Operation.Save)]
public Receipt_Save(object pk, DataSet delta);
// compiler cannot flag if someone deviates from team's standard
[Task("Receipt", Operation.Save)]
public Receipt_Save(object pk, object[] delta);
}
、ランタイム上で、私はすべてのミドルの方法を反復処理し、コレクションに入れましょう:私はこのようなメソッドを持っていますプラグインベースのシステム)
私は属性をより自己記述的にすることができれば、コンパイラは矛盾を捕捉できると思っています。
namespace Craft
{
// public delegate DataSet SaveDelegate(object pk, DataSet delta); // defined in TaskAttribute
public abstract class MiddleTier : MarshalByRefObject
{
[Task("Invoice", SaveDelegate)]
public abstract Invoice_Save(object pk, DataSet delta);
[Task("Receipt", SaveDelegate)]
// it's nice if the compiler can flag an error
public abstract Receipt_Save(object pk, object[] delta);
}
}
私は、各クラスにメソッドを配置すると、常にRemotingオブジェクトをインスタンス化するのは大変だと思っています。別のクラスに置くと、コードの再利用を容易にすることが難しくなります.Interoice_OpenにInvoice_Saveの情報が必要であるとしましょう。実際、私は、呼び出されたメソッド内のRemoting middletier DataSetからデータをフェッチしたレポート(クリスタル)を持っていても、他のメソッドの情報を取得して独自のDataSetをマージしています。すべてがサーバー側で行われます(中間層)
これはどの言語ですか? – hlovdal
言語はC# – Hao
私はそれを全く実践していないので答えに入れませんが、反射を使って、(1)クラス内のすべてのメソッドを取得できます(2)与えられた署名と属性 –