2016-07-07 44 views
0

定義泛型類型的線程局部變量我想定義以下一般類型的線程局部變量:如何在Delphi

type 
    TSession<T: TEntity> = class(TInterfacedObject, ISession<T>); 

我試圖定義與threadvar關鍵字,但我的變量我有問題,因爲通用參數:

threadvar 
    mySession: ISession<T>; // not working 

在Delphi中定義泛型類型的線程局部變量的建議方法是什麼?

+0

你究竟在做什麼?你能解釋一下爲什麼你不能用'threadvar mySession:ISession 做什麼;想想爲什麼這不符合你的需求將幫助你解決如何解決這個問題,我懷疑。 –

+0

@大衛:謝謝你的幫助,我真的很感激。答案已經解決了Stefan Glienke的問題。 – MUG4N

+0

所以你真的想爲'ISession '的每個實例化擁有一個獨特的線程變量?我想知道你是否完全理解這一點。現在您的代碼編譯並不意味着它能夠完成您需要的操作。 –

回答

1

您不能在泛型類型(或方法)之外聲明一個開放泛型的變量,這與threadvar無關。

要麼把threadvar泛型類型裏面(當然它必須是一個class threadvar),知道什麼類型的TISession<T>您正在使用或使用非通用基類型從ISession<T>繼承。

此外,你必須知道你可能會在這裏創建一個內存泄漏,因爲threadvars並沒有被隱式確定(參見here) - 你必須注意這一點。

+0

我已經嘗試將threadvar放入泛型類型中,但代碼無法編譯:E2029'END'預計但'THREADVAR'找到。你如何在一個泛型類型中嵌套threadvar? – MUG4N

+0

您不能在類型中嵌套threadvar。 threadvar具有全局作用域,但是每個線程都被實例化。因此,這個答案的第二段的第一部分是不正確的。 –

+0

是的,你可以,它必須是'class threadvar'。 –