想象一下,無論您何時創建通用類MyClass<T>
,都會自動生成一個接口MyClass<>
,其中包含所有不使用通用參數或返回值的方法和屬性MyClass<T>
。在可以容納泛型類的任意T類型的變量類型中是否存在任何基本缺陷?
這將使我無法從創建一次性接口的工作中解脫出來,只是爲了能夠處理不同的T
類型的通用對象。這個想法有一個基本問題,那就是它不是語言的一部分,或者只是一個「沒有被優先考慮或被認爲是重要的」的情況?
當我說「接口」時,我並不是說它必須被分類爲「接口」。這只是解釋我的意思的簡單方法。一種抽象基類將是另一種思考它的方式。如果此功能存在,則不會將其視爲生成的接口,例如List<>
類型的變量當然可以包含任何通用列表,例如List<int>
或List<MyElement>
,然後您可以調用它,如Count
,Clear()
,Capacity
等,因爲那些不需要知道類型的T
。
只是爲了說清楚爲什麼這不是一個討論話題,但有一個明確的答案的問題:
我的問題是,是否有在想法本身就是一個缺陷,使得它與類型安全不兼容或相似,還是其中沒有任何根本的缺陷。用法
例子:
我有一個既包含一些數據依賴於泛型類型,並沒有一些其他數據的通用類。而且我有可以重用的代碼,可以操縱數據的非通用部分。目前我只能通過定義與我的泛型類具有相同成員的接口(減去使用泛型參數或返回值的成員)來完成此操作。當我不打算實現多個實現時,必須定義這個接口似乎是多餘的。在沒有指定額外接口的情況下可以完成相同的語言功能,因爲所需的信息已經在泛型類本身中,對於這種情況將會很方便。
對於簡單的情況,通用類有一個非泛型基類。但是,如果MyClass<T>
已從MyBaseClass<T>
繼承,則不可能在其中放入非泛型類,並且只能使用一個接口。
我已經讀了三次你的問題,我仍然完全不知道你在問什麼。 –
我同意你在問什麼? –
我在問,如果這樣一個特性在概念上可能會添加到C#中,或者如果這個想法存在根本的缺陷,這意味着這樣的語言特性永遠不會被添加到C#中。 – runevision