有沒有一門課完全等於這門課?在.NET中是否有內置的通用類?
Class X(Of T)
Public value As T
End Class
注意,無論是Nullable(Of T)
也不Tuple(Of T)
等於這個類,因爲他們不允許你設置的成員值。該類應具有以下特性:
- 當作爲參數傳遞,被調用的方法所做的任何更改應該不會影響發送對象,也就是因爲它的固有類型不應該創建對象的副本。
- 應該允許使用的語法
x.value = <some value>
其中x是X
有沒有一門課完全等於這門課?在.NET中是否有內置的通用類?
Class X(Of T)
Public value As T
End Class
注意,無論是Nullable(Of T)
也不Tuple(Of T)
等於這個類,因爲他們不允許你設置的成員值。該類應具有以下特性:
x.value = <some value>
其中x是X沒有一個定論的對象成員value
設定的值,但我給它一個去。
我個人從未見過這種類型的課程。即使在仿製藥的文件顯示正在創建示例中使用與你相似的示例類:
msdn generics in the .net framework.
這裏的例子:
Public Class Generic(Of T)
Public Field As T
End Class
....
Public Shared Sub Main()
Dim g As New Generic(Of String)
g.Field = "A string"
'...
Console.WriteLine("Generic.Field = ""{0}""", g.Field)
Console.WriteLine("Generic.Field.GetType() = {0}", g.Field.GetType().FullName)
End Sub
我有時會創建這樣一類,幾乎逐字,雖然我叫Holder<T>
和Value
;有兩個很好的使用情況對於這樣一類:
鑑於Holder<someValueType>
的集合,它是可以執行的集合的內容方便就地修改。例如,給出List<Holder<Point>>
,可以說MyList[3].Value.X += 5;
。
如果T
是一種允許進行原子操作的類型,那麼即使該集合不是線程安全,也可以對Holder<T>
集合的內容執行線程安全的原子操作。例如,在我事先知道字典所需的所有密鑰的情況下,我創建了一個Dictionary<String, Holder<Integer>>
,然後可以使用多個線程使用Interlocked.Increment
來計算每個字符串出現的次數。儘管Dictionary
不是線程安全的,但該程序是線程安全的,不會鎖定,因爲存儲在字典中的Holder<Integer>
項的集合從未必須更改。
如果你想使用內置型,有一個將工作:一T[]
與尺寸之一。這種類型的主要缺點是,類型中沒有內在的東西可以確保元素零實際存在(即它不會是一個空數組)。
+1用於使用場景。 – dotNET 2013-02-25 17:52:45
我相信你知道這件事,但萬一你不是,或者以後別人在這個頁面上絆倒的人不是......你熟悉'ByRef'修飾符關鍵字, 對? – 2013-02-25 13:49:27
是的,我是。但這對我來說不起作用。我需要將該變量傳遞給QueueUserWorkItem的回調委託,後者恰好具有「委託子WaitCallback(狀態爲對象)」的定義。所以發送ByRef不是一個選項。我將修改回調函數中的變量,然後在回調完成後在主線程中檢查其值。即使發送一個對象(這是一個ref類型)也不是一個解決方案,但是在回調函數中爲狀態變量賦值會使原始對象保持不變。所以我需要一個包含VAL類型的REF類型。 – dotNET 2013-02-25 14:23:00
好的。你聽起來像一個知道你在做什麼的人,但我覺得有必要提及它。繼續:) – 2013-02-25 14:25:25