讓我們說我有有沒有一種方法可以強制執行特定方法簽名的方法?
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
}
}
[編輯]
目的:我已經把我的middletier的方法屬性。我有這樣的方法:
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);
}
然後在運行時,我會遍歷所有middletier的方法,並把它們集合(屬性有很大幫助,在這裏),然後映射他們的winform的委託功能(通過接口方便,基於插件的系統)作爲加載
我在想如果我可以使屬性更自我描述,所以編譯器可以捕獲不一致。
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);
}
}
我在想,如果把方法上的每個類,這將是一個矯枉過正總是實例化一個遠程對象。將它們放在單獨的類中,可能會更難以促進代碼重用,比方說,Invoice_Save需要有關Receipt_Open的一些信息。事實上,我甚至在這裏有一個報告(crystal),它在調用的方法內部獲取來自Remoting middletier DataSet的數據,獲取其他方法的一些信息併合併到它自己的DataSet中,它們都發生在middletier上,沒有多次往返,所有人都在服務器端(中間層)
這是什麼語言? – hlovdal 2009-06-29 07:08:14
語言是C# – Hao 2009-06-29 07:12:46