让我们说我有有没有一种方法可以强制执行特定方法签名的方法?
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