首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

帮忙想个方法用整型实现枚举的可读性(标题很学术, )

2013-07-25 
帮忙想个方法用整型实现枚举的可读性(标题很学术, 呵呵)是这样的, 我写了一个执行存储过程的类继承TADOSto

帮忙想个方法用整型实现枚举的可读性(标题很学术, 呵呵)
是这样的, 我写了一个执行存储过程的类继承TADOStoredProc, 存储过程是有很多输入参数的嘛, 这些参数的读写是通过Index的方式的, 比如 
  TMyStoredProc.Params[Index] = Value, 

问题来了, Index一般都是1, 5, 6, 9这样没有意义的数字, 现在我的想法是用枚举来做Index, 比如
  Type Param = (Name, Age, Height);
那我这可以这么用
  TMyStoredProc.Params[Name] = Value 

当然Params的Write Procedure的签名就变了
  由SetParams(I: Inetger; V: Variant) -> SetParams(I: Param; V: Variant)

这样显然就不能把俺写的类做成一个通用的类了, 因为每个具体存储过程实现我都需要定义一个不同的枚举!

有木有同学给个方案! 分不多, 100送上!

谢谢
M.
[解决办法]
整型可以转化成枚举啊
[解决办法]
var
  p: Param;
  id: Integer;
begin
  id := Ord(Param);
end;
[解决办法]


// 不知是不是要表达这个意思

type
  Param = (Name, Age, Height, Width); // 可以随意定义这个枚举
var
  p: TParameter;
  stored: TMyStoredProc;
begin
  stored := TMyStoredProc.Create(nil);
  p := stored.Parameters.AddParameter;
  p.Name := 'Name';
  p.Value := '阿扁';

  p := stored.Parameters.AddParameter;
  p.Name := 'Age';
  p.Value := '50';

  p := stored.Parameters.AddParameter;
  p.Name := 'Height';
  p.Value := '100cm';

  p := stored.Parameters.AddParameter;
  p.Name := 'Width';
  p.Value := '10000kg';

  // 通过参数名来访问参数值
  ShowMessage(stored.Parameters.ParamByName('Name').Value);
  ShowMessage(stored.Parameters.ParamByName('Age').Value);
  ShowMessage(stored.Parameters.ParamByName('Height').Value);
  ShowMessage(stored.Parameters.ParamByName('Height').Value);

  stored.Free;


end;


[解决办法]
如果是上面说的意思,实际没必要定义这个枚举,直接通过参数name来索引参数
[解决办法]
TADOStoredProc参数赋值方法本来就有 ParamsByName的方法,完全可以用参数名。
[解决办法]
自己继承扩展TParameter,d2009及以上版本支持泛型
[解决办法]
引用:
Quote: 引用:

var
  p: Param;
  id: Integer;
begin
  id := Ord(Param);
end;

这还是没有解决我说的每个存储过程都得根据枚举类型的不同特殊出每个子类, 我的想法是delphi能不能做成C++模板这样的做法(大概这意思,假如C++也有Ord)
template<class T>
SetParams(T param, Varaint v){
  this->Parameters[Ord(T)] = v;
}
这样的化特殊化就由编译器来做, 不用我每遇到一个新的存储过程定义不同的枚举就要写一个子类
泛型,D2009+

热点排行