假设我有
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
}
}
[编辑]
目的:我已经在中间层的方法中添加了属性。我有这样的方法:
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);
}
然后在运行时,我将迭代所有中间层的方法并将它们放入集合(属性在这里很有帮助),然后将它们映射到 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);
}
}
我在想,如果将方法放在每个类上,总是实例化一个 Remoting 对象将是一种矫枉过正的做法。并将它们放在单独的类中,可能更难促进代码重用,假设 Invoice_Save 需要一些关于 Receipt_Open 的信息。事实上我什至这里有一个报告(水晶),它从远程中间层数据集中获取数据,在调用的方法内部,它获取其他方法的一些信息并合并到自己的数据集中,它们都发生在中间层,没有几次往返,一切都在服务器端(中间层)完成