2011-11-28 116 views
1

这里是我的一个项目的剥离下来的片段:如何获得泛型类之外的实际泛型参数?

接口部分:

type 
    TMainFormView<T:TCustomForm> = class(TInterfacedObject, IMainFormView) 
    private 
    ... 
    protected 
    function GetMainFormClass: TCustomFormClass; 
    // 
    property MainFormClass:TCustomFormClass read GetMainFormClass; 
    public 
    ... 
    end; 

实现部分:

function TMainFormView<T>.GetMainFormClass: TCustomFormClass; 
begin 
    Result:= T; 
end; 

我已经重构它和前执行是非常丑陋的相信我(我用了一个内部类,我最近发现它是一种矫枉过正而不优雅的)。

有没有其他更好的方法来编码它?我的目的是能够提取T的“具体”类,并通过受保护的属性对其进行公开。

回答

1

这个问题似乎有点含糊,但我明白,你要求一种更简单的方式来查询实例的T值,实例化类型的类型参数。我知道要做到这一点的唯一方法就是通过一种方法,就像你所做的一样。我认为你已经有了最好的解决方案。