我用來實例對象如下:實例化和界面
type obj-name = new type();
,現在我使用
IList<string> str_element = new List<string>();
我期待看到的東西
IList<string> actors = new IList<string>();
能有人給我一些想法,爲什麼接口實例化在這裏是不同的?
感謝,
阿米特
我用來實例對象如下:實例化和界面
type obj-name = new type();
,現在我使用
IList<string> str_element = new List<string>();
我期待看到的東西
IList<string> actors = new IList<string>();
能有人給我一些想法,爲什麼接口實例化在這裏是不同的?
感謝,
阿米特
的接口就是這樣—的接口,還是應該有哪些方法的規範。
一個接口不包含任何實際的代碼。
接口只能用作持有具體類的類型。
創建接口的實例沒有任何意義,因爲沒有什麼可以實例化。
你無法做的原因= new IList<string>()
是因爲IList<T>
是一個接口,你不能初始化接口,因爲沒有任何代碼可以調用。我會推薦做
List<string> actors = new List<string>()
改爲。
不要誤會我這個作品,但我想知道,但在這些答案後,我想起了我在OOP讀過的關於界面的東西! – 2012-08-15 00:03:40
你可以使用LINQ:例如
這會給你一個更具體類型的東西。
using System.Linq;
IList<Foo> list = new List<Foo>();
IEnumerable<Foo> sortedEnum = list.OrderBy(f=>f.Bar);
IList<Foo> sortedList = sortedEnum.ToList()
我知道科爾我只是舉了一個例子,但這並不意味着他不想排序..我看到了演員,所以這就是爲什麼我發佈的例子抱歉.. – MethodMan 2012-08-15 00:08:06
接口定義一個合同,或一組功能,即實現類必須提供(至少)。通過定義一個類型爲IList<T>
的變量,您確實在說:「我不在乎實際的實現是什麼,它只是需要提供該功能。」這意味着你在調用代碼中分離了「接口」和「實現」,這是一件好事。
接口的真正威力在於你擁有可插拔的代碼。如果您定義了一個庫,而不是返回一個實例,則可以返回一個實例(該AFAIK是LINQ功能的作用)。這允許你改變返回對象的內部實現(它可能是一個鏈表或B樹,或其他),並且調用代碼不需要改變。
大部分模擬庫(例如NMock,Moq等)都利用接口並可以爲測試目的生成實現類。
擊敗我30秒! – 2012-08-14 23:55:10