Ric*_*ler 4 delphi generics delphi-2010 spring4d
使用Delphi Spring框架,是否可以使用GlobalContainter注册泛型类型?我正在尝试做这样的事情:
TMyBaseType = class
protected
FName: string;
function GetName: string; virtual;
procedure SetName(Value: string); virtual;
public
property Name: string read GetName write SetName;
end;
TMyFirstThing = class(TMyBaseType)
protected
function GetName: string; override;
end;
TMySecondThing = class(TMyBaseType)
protected
procedure SetName(Value: string); override;
end;
TMyGenericType<T: TMyBaseType> = class
public
procedure DoSomethingWithIt(AObject: T);
function GetTheSomethingsName(AObject: T): string;
end;
// I now want to be able to use the ServiceLocator to get me an instance
// such as TMyGenericType<TMyFirstThing> or TMyGenericType<TMySecondThing>
// but I cannot figure out how to register TMyGenericType<>
......
initialization
GlobalContainer.RegisterType<TMyGenericType<>>;
// this line fails with the messages:
// [DCC Error] E2251 Ambiguous overloaded call to 'RegisterType'
// [DCC Error] E2531 Method 'RegisterType' requires explicit type argument(s)
Run Code Online (Sandbox Code Playgroud)
我不确定我想要做的是否可行,或者是否有更好的/替代的方法来做到这一点?我正在使用Delphi 2010和最新的Spring4D框架.(我也有Delphi XE5,但由于第三方库,该项目本身仍然是2010年).任何想法或建议将非常感激.
Delphi没有未绑定(或开放)泛型类型(类似于TMyGenericType<>.
你的情况,你必须注册每个封闭构造的泛型类型(TMyGenericType<TMyFirstThing>,TMyGenericType<TMySecondThing>,...)分别.
关于C#,C++和Delphi中泛型差异的更多信息:http: //blogs.teamb.com/craigstuntz/2009/10/01/38465/