精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

30分鐘泛型教程

開發(fā) 后端
泛型是程序設計語言的一種特性。允許程序員在強類型程序設計語言中編寫代碼時定義一些可變部分,那些部分在使用前必須作出指明。下面,各位網(wǎng)友們認真看看30分鐘,完全掌握泛型的用法。

我們先來看一個最為常見的泛型類型List<T>的定義

(真正的定義比這個要復雜的多,我這里刪掉了很多東西)

  1. [Serializable]  
  2. public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>  
  3. {  
  4.     public T this[int index] { get; set; }  
  5.     public void Add(T item);  
  6.     public void Clear();  
  7.     public bool Contains(T item);  
  8.     public int IndexOf(T item);  
  9.     public bool Remove(T item);  
  10.     public void Sort();  
  11.     public T[] ToArray();  

List后面緊跟著一個<T>表示它操作的是一個未指定的數(shù)據(jù)類型(T代表著一個未指定的數(shù)據(jù)類型)

可以把T看作一個變量名,T代表著一個類型,在List<T>的源代碼中任何地方都能使用T。

T被用作方法的參數(shù)和返回值。

Add方法接收T類型的參數(shù),ToArray方法返回一個T類型的數(shù)組

注意:

泛型參數(shù)必須以T開頭,要么就叫T,要么就叫TKey或者TValue;

這跟接口要以I開頭是一樣的,這是約定。

下面來看一段使用泛型類型的代碼

  1. var a = new List<int>();  
  2.             a.Add(1);  
  3.             a.Add(2);  
  4.             //這是錯誤的,因為你已經(jīng)指定了泛型類型為int,就不能在這個容器中放入其他的值  
  5.             //這是編譯器錯誤,更提升了排錯效率,如果是運行期錯誤,不知道要多么煩人  
  6.             a.Add("3");  
  7.             var item = a[2]; 

請注意上面代碼里的注釋

二、泛型的作用(1):

作為程序員,寫代碼時刻不忘代碼重用。

代碼重用可以分成很多類,其中算法重用就是非常重要的一類,假設你要為一組整型數(shù)據(jù)寫一個排序算法,又要為一組浮點型數(shù)據(jù)寫一個排序算法,如果沒有泛型類型,你會怎么做呢?

你可能想到了方法的重載。

寫兩個同名方法,一個方法接收整型數(shù)組,另一個方法接收浮點型的數(shù)組。

但有了泛型,你就完全不必這么做,只要設計一個方法就夠用了,你甚至可以用這個方法為一組字符串數(shù)據(jù)排序。

三、泛型的作用(2):

假設你是一個方法的設計者,這個方法需要有一個輸入?yún)?shù),但你并能確定這個輸入?yún)?shù)的類型,那么你會怎么做呢?

有一部分人可能會馬上反駁:“不可能有這種時候!”

那么我會跟你說,編程是一門經(jīng)驗型的工作,你的經(jīng)驗還不夠,還沒有碰到過類似的地方。

另一部分人可能考慮把這個參數(shù)的類型設置成Object的,這確實是一種可行的方案,但會造成下面兩個問題,如果我給這個方法傳遞整形的數(shù)據(jù)(值類型的數(shù)據(jù)都一樣),就會產(chǎn)生額外的裝箱、拆箱操作,造成性能損耗。

如果你這個方法里的處理邏輯不適用于字符串的參數(shù),而使用者又傳了一個字符串進來,編譯器是不會報錯的,只有在運行期才會報錯。

(如果質(zhì)管部門沒有測出這個運行期BUG,那么不知道要造成多大的損失呢)

這就是我們常說的:類型不安全。

四、泛型的示例:

像List<T>和Dictionary<TKey,TValue>之類的泛型類型我們經(jīng)常用到,下面我介紹幾個不常用到的泛型類型。

ObservableCollection<T>

當這個集合發(fā)生改變后會有相應的事件得到通知。

請看如下代碼:

  1. static void Main(string[] args)  
  2. {  
  3.     var a = new ObservableCollection<int>();  
  4.     a.CollectionChanged += a_CollectionChanged;  
  5. }  
  6.  
  7. static void a_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)  
  8. {  
  9.     //可以通過Action來判斷是什么操作觸發(fā)了事件  
  10.     //e.Action == NotifyCollectionChangedAction.Add  
  11.  
  12.     //可以根據(jù)以下兩個屬性來得到更改前和更改后的內(nèi)容  
  13.     //e.NewItems;  
  14.     //e.OldItems;  

使用這個集合需要引用如下兩個名稱空間

  1. using System.Collections.ObjectModel;  
  2. using System.Collections.Specialized; 

BlockingCollection<int>是線程安全的集合

來看看下面這段代碼

  1. var bcollec = new BlockingCollection<int>(2);  
  2. //試圖添加1-50  
  3. Task.Run(() =>  
  4. {  
  5.     //并行循環(huán)  
  6.     Parallel.For(1, 51, i =>  
  7.     {  
  8.         bcollec.Add(i);  
  9.         Console.WriteLine("加入:" + i);  
  10.     });  
  11. });  
  12.  
  13. Thread.Sleep(1000);  
  14. Console.WriteLine("調(diào)用一次Take");  
  15. bcollec.Take();  
  16.  
  17. //等待無限長時間  
  18. Thread.Sleep(Timeout.Infinite); 

輸出結果為:

  1. 加入:1  
  2. 加入:37  
  3. 調(diào)用一次Take  
  4. 加入:13 

BlockingCollection<int>還可以設置CompleteAdding和IsCompleted屬性來拒絕加入新元素。

.NET類庫還提供了很多的泛型類型,在這里就不一一例舉了。

#p#

五、泛型的繼承:

在.net中一切都繼承字Object,泛型也不例外,泛型類型可以繼承自其他類型。

來看一下如下代碼

  1. public class MyType  
  2. {  
  3.     public virtual string getOneStr()  
  4.     {  
  5.         return "base object Str";  
  6.     }  
  7. }  
  8. public class MyOtherType<T> : MyType  
  9. {  
  10.     public override string getOneStr()  
  11.     {  
  12.         return typeof(T).ToString();  
  13.     }  
  14. }  
  15. class Program  
  16. {  
  17.     static void Main(string[] args)  
  18.     {  
  19.         MyType target = new MyOtherType<int>();  
  20.         Console.WriteLine(target.getOneStr());  
  21.         Console.ReadKey();  
  22.     }  

泛型類型MyOtherType<T>成功的重寫了非泛型類型MyType的方法。

如果我試圖按如下方式從MyOtherType<T>類型派生子類型就會導致編譯器錯誤。

  1. //編譯期錯誤  
  2. public class MyThirdType : MyOtherType<T>  
  3. {  
  4. }  
  5.  

但是如果寫成這種方式,就不會出錯

  1. public class MyThirdType : MyOtherType<int>  
  2.     {  
  3.         public override string getOneStr()  
  4.         {  
  5.             return "MyThirdType";  
  6.         }  
  7.     } 

注意:

如果按照如上寫法,會造成類型不統(tǒng)一的問題,

如果一個方法接收MyThirdType類型的參數(shù),

那么不能將一個MyOtherType<int>的實例傳遞給這個方法,   

然而一個方法如果接收MyOtherType<int>類型的參數(shù),

卻可以把MyThirdType類型的實例傳遞給這個方法,

這是CLR內(nèi)部實現(xiàn)機制造成的,

這看起來確實很怪異!

寫成如下方式也不會出錯:

  1. public class MyThirdType<T> : MyOtherType<T>  
  2.     {  
  3.         public override string getOneStr()  
  4.         {  
  5.             return typeof(T).ToString() + " from MyThirdType";  
  6.         }  
  7.     } 

此中訣竅,只可意會,不可言傳。

六、泛型接口

.NET類庫里有很多泛型的接口,比如:IEnumerator<T>、IList<T>等,這里不對這些接口做詳細描述了,值說說為什么要有泛型接口。

其實泛型接口出現(xiàn)的原因和泛型出現(xiàn)的原因類似,拿IComparable這個接口來說,此接口只描述了一個方法:

  1. int CompareTo(object obj); 

大家看到,如果是值類型的參數(shù),勢必會導致裝箱和拆箱操作。

同時,也不是強類型的,不能在編譯期確定參數(shù)的類型,有了IComparable<T>就解決掉這個問題了:

  1. int CompareTo(T other); 

七、泛型委托

委托描述方法,泛型委托的由來和泛型接口類似。

定義一個泛型委托也比較簡單:

  1. public delegate void MyAction<T>(T obj); 

這個委托描述一類方法,這類方法接收T類型的參數(shù),沒有返回值。

來看看使用這個委托的方法:

  1. public delegate void MyAction<T>(T obj);  
  2. static void Main(string[] args)  
  3. {  
  4.     var method = new MyAction<int>(printInt);  
  5.     method(3);  
  6.     Console.ReadKey();  
  7. }  
  8. static void printInt(int i)  
  9. {  
  10.     Console.WriteLine(i);  

由于定義委托比較繁瑣,.NET類庫在System名稱空間,下定義了三種比較常用的泛型委托。

Predicate<T>委托:

  1. public delegate bool Predicate<T>(T obj); 

這個委托描述的方法為接收一個T類型的參數(shù),返回一個BOOL類型的值,一般用于比較方法。

Action<T>委托

  1. public delegate void Action<T>(T obj); 
  1. public delegate void Action<T1, T2>(T1 arg1, T2 arg2); 

這個委托描述的方法,接收一個或多個T類型的參數(shù)(最多16個,我這里只寫了兩種類型的定義方式),沒有返回值。

Func<T>委托

  1. public delegate TResult Func<TResult>(); 
  1. public delegate TResult Func<T, TResult>(T arg); 

這個委托描述的方法,接收零個或多個T類型的參數(shù)(最多16個,我這里只寫了兩種類型的定義方式),與Action委托不同的是,它有一個返回值,返回值的類型為TResult類型的。

關于委托的描述,您還可以看我這篇文章。

#p#

八、泛型方法

泛型類型中的T可以用在這個類型的任何地方,然而有些時候,我們不希望在使用類型的時候就指定T的類型,我們希望在使用這個類型的方法時,再指定T的類型。

來看看如下代碼:

  1. public class MyClass  
  2.     {  
  3.         public TParam CompareTo<TParam>(TParam other)  
  4.         {  
  5.             Console.WriteLine(other.ToString());  
  6.             return other;  
  7.         }  
  8.     } 

上面的代碼中MyClass并不是一個泛型類型,但這個類型中的CompareTo<TParam>()卻是一個泛型方法,TParam可以用在這個方法中的任何地方。

使用泛型方法一般用如下代碼就可以了:

  1. obj.CompareTo<int>(4);  
  2. obj.CompareTo<string>("ddd"); 

然而,你可以寫的更簡單一些,寫成如下的方式:

  1. obj.CompareTo(2);  
  2. obj.CompareTo("123"); 

有人會問:“這不可能,沒有指定CompareTo方法的TParam類型,肯定會編譯出錯的”

我告訴你:不會的,編譯器可以幫你完成類型推斷的工作。

注意:

如果你為一個方法指定了兩個泛型參數(shù),而且這兩個參數(shù)的類型都是T,那么如果你想使用類型推斷,你必須傳遞兩個相同類型的參數(shù)給這個方法,不能一個參數(shù)用string類型,另一個用object類型,這會導致編譯錯誤。

九、泛型約束

我們設計了一個泛型類型,很多時候,我們不希望使用者傳入任意類型的參數(shù),也就是說,我們希望“約束”一下T的類型。

來看看如下代碼:

  1. public class MyClass<T> where T : IComparable<T>  
  2.     {  
  3.         public int CompareTo(T other)  
  4.         {  
  5.             return 0;  
  6.         }  
  7.     } 

上面的代碼要求T類型必須實現(xiàn)了IComparable<T>接口。

如你所見:泛型的約束通過關鍵字where來實現(xiàn)。

泛型方法當然也可以通過類似的方式對泛型參數(shù)進行約束。

請看如下代碼:

  1. public class MyClass  
  2. {  
  3.     public TParam CompareTo<TParam>(TParam other) where TParam:class 
  4.     {  
  5.         Console.WriteLine(other.ToString());  
  6.         return other;  
  7.     }  

上面代碼中用了class關鍵字約束泛型參數(shù)TParam;具體稍后解釋。

注意1:

如果我有一個類型也定義為MyClass<T>但沒有做約束,那么這個時候,做過約束的MyClass<T>將與沒做約束的MyClass<T>沖突,編譯無法通過。

注意2:

當你重寫一個泛型方法時,如果這個方法指定了約束,在重寫這個方法時,不能再指定約束了。

注意3:

雖然我上面的例子寫的是接口約束,但你完全可以寫一個類型,比如說BaseClass。而且,只要是繼承自BaseClass的類型都可以當作T類型使用,你不要試圖約束T為Object類型,編譯不會通過的。(傻子才這么干)

注意4:

有兩個特殊的約束:class和struct。

where T : class 約束T類型必須為引用類型

where T : struct 約束T類型必須為值類型

注意5:

如果你沒有對T進行class約束,

那么你不能寫這樣的代碼:T obj = null; 這無法通過編譯,因為T有可能是值類型的。

如果你沒有對T進行struct約束,也沒有對T進行new約束。

那么你不能寫這樣的代碼:T obj = new T(); 這無法通過編譯,因為值類型肯定有無參數(shù)構造器,而引用類型就不一定了。

如果你對T進行了new約束:where T : new(); 那么new T()就是正確的,因為new約束要求T類型有一個公共無參構造器。

注意6:

就算沒有對T進行任何約束,也有一個辦法來處理值類型和引用類型的問題。

T temp = default(T);

如果T為引用類型,那么temp就是null;如果T為值類型,那么temp就是0;

注意7:

試圖對T類型的變量進行強制轉化,一般情況下會報編譯期錯誤。

但你可以先把T轉化成object再把object轉化成你要的類型(一般不推薦這么做,你應該考慮把T轉化成一個約束兼容的類型)。

你也可以考慮用as操作符進行類型轉化,這一般不會報錯,但只能轉化成引用類型。

關于泛型約束的內(nèi)容,我在這篇文章里也有提到。

十、逆變和協(xié)變

一般情況下,我們使用泛型時,由T標記的泛型類型是不能更改的。

也就是說,如下兩種寫法都是錯誤的:

  1. var a = new List<object>();  
  2. List<string> b = a;  
  3. var c = new List<string>();  
  4. List<object> d = c; 

注意:這里沒有寫強制轉換,即使寫了強制轉換也是錯誤的,編譯就無法通過,然而泛型提供了逆變和協(xié)變的特性,有了這兩種特性,這種轉換就成為了可能。

逆變:

泛型類型T可以從基類型更改為該類的派生類型,用in關鍵字標記逆變形式的類型參數(shù),而且這個參數(shù)一般作輸入?yún)?shù)。

協(xié)變:

泛型類型T可以從派生類型更改為它的基類型,用out關鍵字來標記協(xié)變形式的類型參數(shù),而且這個參數(shù)一般作為返回值。

如果我們定義了一個這樣的委托:

  1. public delegate TResult MyAction<in T,out TResult>(T obj); 

那么,就可以讓如下代碼通過編譯(不用強制轉換)

  1. var a = new MyAction<object, ArgumentException>(o => new ArgumentException(o.ToString()));  
  2. MyAction<string, Exception> b = a; 

這就是逆變和協(xié)變的威力。

原文鏈接:http://www.cnblogs.com/liulun/archive/2013/05/02/3033599.html

責任編輯:林師授 來源: 博客園
相關推薦

2024-06-19 09:58:29

2021-07-01 06:47:30

Java泛型泛型擦除

2017-01-10 09:07:53

tcpdumpGET請求

2020-09-29 06:37:30

Java泛型

2020-05-22 10:20:27

Shiro架構字符串

2017-07-18 11:10:45

2014-04-22 09:42:12

Bash腳本教程

2024-08-27 13:43:38

Spring系統(tǒng)業(yè)務

2017-06-07 18:40:33

PromiseJavascript前端

2013-12-11 10:00:14

C++新特性C

2022-09-30 15:46:26

Babel編譯器插件

2016-08-03 16:01:47

GitLinux開源

2016-04-06 11:14:48

iOS相機自定義

2011-07-11 09:58:52

2018-02-02 10:24:37

Nginx入門指南

2018-04-24 14:52:48

LinuxBash腳本

2019-12-12 10:25:33

Java泛型編程語言

2025-10-30 09:09:25

2021-10-28 05:34:46

云計算云游戲Stadia

2025-10-29 09:03:20

點贊
收藏

51CTO技術棧公眾號

欧美日韩国产一区中文午夜| 成人教育av在线| www.xxxx精品| 精品一区二区三区四区五区六区| 日韩电影免费看| 国产精品天天摸av网| 亚洲综合中文字幕在线| 亚洲熟女综合色一区二区三区| 日韩一区欧美| 亚洲国产精品大全| 免费一区二区三区在线观看| 国产丝袜在线观看视频| 国产人成亚洲第一网站在线播放| 91精品网站| 中文字幕一区二区人妻视频| 影视一区二区| 一区二区三区天堂av| 稀缺小u女呦精品呦| 欧美另类激情| 色综合久久88色综合天天 | www.麻豆av| 日韩精品乱码免费| 午夜精品久久久久久久99热浪潮 | 亚洲女同志亚洲女同女播放| 日本欧美久久久久免费播放网| 欧美国产日韩一区二区| 国精产品视频一二二区| 美女久久99| 精品国产亚洲一区二区三区在线观看| 国产三级三级看三级| av资源亚洲| 婷婷六月综合网| 国产在线视频在线| 国内精品久久久久久野外| 国产午夜三级一区二区三| 国产精品夜夜夜一区二区三区尤| 国产日韩精品suv| 麻豆国产精品一区二区三区| 日韩av毛片网| 久久久国产高清| 激情综合网址| 久久久久久久久久久久av| 亚洲天堂黄色片| 99久久久国产精品美女| 日韩视频免费在线观看| 成人在线观看免费高清| 精品久久久久久久久久久下田| 亚洲国产高清高潮精品美女| 亚洲三级在线视频| 久久九九精品视频| 91精品国产综合久久福利软件| 久久人人爽av| 免费视频观看成人| 欧美日本国产视频| 男人的天堂最新网址| 中文字幕日韩亚洲| 91麻豆精品91久久久久久清纯| 九九精品久久久| 亚洲欧美专区| 日韩一级精品视频在线观看| 久热在线视频观看| 日韩精品一区二区三区中文在线| 91精品在线免费| 99国产精品免费视频| 69精品国产久热在线观看| 欧美电影免费提供在线观看| 美女黄色一级视频| 全国精品免费看| 亚洲日本欧美日韩高观看| 在线免费观看视频| 亚洲电影在线一区二区三区| 欧美日韩成人网| 国产精品成人aaaa在线| 欧美亚洲三区| 国产日韩在线一区| www香蕉视频| 91网站在线播放| 视频在线一区二区三区| 免费观看久久久久| 亚洲成人av一区二区三区| 国产精品秘入口18禁麻豆免会员| 偷拍精品精品一区二区三区| 欧美日韩中文字幕精品| 免费观看黄网站| 少妇久久久久| 色偷偷噜噜噜亚洲男人的天堂| avove在线播放| 国产精品久久久久久久久久妞妞| 国产精品v片在线观看不卡| 91久久国语露脸精品国产高跟| 国产成人自拍高清视频在线免费播放| 国产一区在线观| 91xxx在线观看| 一区二区国产视频| 999在线免费视频| 538任你躁精品视频网免费| 亚洲亚裔videos黑人hd| 久久久久亚洲av无码专区体验| 老鸭窝毛片一区二区三区| 91夜夜未满十八勿入爽爽影院 | 国产美女精品视频免费播放软件| 亚洲成人国产精品| 人与动物性xxxx| 亚洲免费一区二区| 4444kk亚洲人成电影在线| 国产一级免费在线观看| 亚洲国产视频网站| 亚洲天堂2018av| 妖精视频一区二区三区| 色综合导航网站| 在线观看xxxx| 2020日本不卡一区二区视频| 黄色录像特级片| 日本欧美一区| 亚洲国产欧美自拍| 精品欧美一区二区久久久久| 男女性色大片免费观看一区二区| 国产伦精品一区二区三区四区免费 | 日韩少妇裸体做爰视频| 韩国理伦片一区二区三区在线播放 | 精品免费av| 91av国产在线| 黄色片一区二区三区| 中文字幕一区日韩精品欧美| 欧美日韩激情视频在线观看| 亚洲成人偷拍| 久久久999精品视频| 这里只有精品国产| 久久精品夜夜夜夜久久| 成人毛片一区二区| silk一区二区三区精品视频 | 黄色亚洲网站| 亚洲国产成人在线播放| 久久亚洲AV无码| 国产精品中文欧美| dy888午夜| 91成人小视频| 日韩中文字幕av| 亚洲精品国产精品国自产网站按摩| 99久免费精品视频在线观看| 九一国产精品视频| 狼人精品一区二区三区在线| 欧美激情视频一区| 欧美视频xxx| 亚洲福利视频导航| 五月天丁香社区| 亚洲激情av| 国产免费一区二区| 国产调教在线| 亚洲欧美另类人妖| 亚洲 欧美 中文字幕| 国产亚洲一本大道中文在线| 日韩一级免费在线观看| 九九精品久久| 国产精品永久免费在线| 黄色网页在线免费观看| 欧美一区二区三区的| 黄色在线观看免费| av一区二区不卡| 成年人观看网站| 欧美三级情趣内衣| 国产伊人精品在线| 性欧美videos高清hd4k| 精品国产伦一区二区三区免费 | 欧美日韩久久一区| 黄色a级片在线观看| 国产精品99久久久久久久女警| 欧美性猛交内射兽交老熟妇| 加勒比色综合久久久久久久久| 91福利视频网| 中文字幕在线免费| 精品欧美一区二区在线观看| 国产又大又黑又粗免费视频| 国产日韩精品一区二区三区| 在线一区二区不卡| 影音先锋亚洲电影| 日本精品一区二区三区高清 久久 日本精品一区二区三区不卡无字幕 | 久久天堂av综合合色| 丰满人妻一区二区三区无码av| 午夜精品成人在线视频| 69视频在线观看免费| 国产一区二区91| 欧美在线观看www| 日韩一区二区在线免费| 国产精品成人一区二区三区| 色尼玛亚洲综合影院| 久久偷看各类女兵18女厕嘘嘘| 欧美在线 | 亚洲| 欧美性受xxxx黑人xyx性爽| 1024手机在线视频| 久久综合色播五月| 亚洲五月激情网| 久久久久在线| 日本在线视频www色| 亚洲电影一级片| 99久久99久久精品国产片| 成人美女大片| 欧美激情视频在线| 午夜激情在线观看| 日韩激情第一页| va婷婷在线免费观看| 欧洲亚洲国产日韩| 国产系列精品av| 亚洲视频精选在线| 亚洲a v网站| 成人性生交大片| 一起操在线视频| 噜噜噜在线观看免费视频日韩| 日本xxxxx18| 成人在线免费观看视频| 九九九热999| 亚洲国产精品免费视频| 国产精品视频男人的天堂| 国产777精品精品热热热一区二区| 色妞色视频一区二区三区四区| 午夜小视频在线播放| 欧美一级片在线| japanese国产在线观看| 欧美性猛交xxxx乱大交3| www.youjizz.com亚洲| 亚洲欧美另类久久久精品2019| 蜜桃久久精品成人无码av| 91毛片在线观看| 蜜臀aⅴ国产精品久久久国产老师| 久久成人久久鬼色| 久久综合伊人77777麻豆最新章节| 亚洲视频大全| 人人干视频在线| 红桃视频国产一区| 奇米777四色影视在线看| 99re66热这里只有精品8| 日韩经典在线视频| 国产不卡一区| 欧美一区二视频在线免费观看| 色婷婷av一区二区三区丝袜美腿| 国产精品久久精品视| 亚洲视频一起| 成人av免费在线看| 亚洲日本视频在线| 国产区一区二区三区| 国产精品xxx在线观看| 国产91一区二区三区| avtt综合网| 国产精品对白刺激久久久| japanese色系久久精品| 国产精品日本一区二区| 欧美人妖在线观看| 久久艹中文字幕| 香蕉久久夜色精品国产使用方法 | 欧美日韩精品一区二区| 中文在线字幕免费观| 精品污污网站免费看| 97超碰人人草| 日韩一卡二卡三卡国产欧美| 后进极品白嫩翘臀在线视频| 精品国产乱码久久久久久1区2区 | 中文字幕欧美日韩| 日本精品在线| 欧美裸身视频免费观看| www.综合网.com| 55夜色66夜色国产精品视频| 激情都市亚洲| 成人欧美一区二区三区在线| 综合成人在线| 久久精品美女| 日本一区二区高清不卡| 国产四区在线观看| 激情欧美国产欧美| 国产综合免费视频| 久久精品72免费观看| 精品国产aⅴ一区二区三区东京热 久久久久99人妻一区二区三区 | 亚洲精品第1页| 日韩字幕在线观看| 欧美日韩你懂的| 午夜精品久久久久久久96蜜桃| 亚洲激情视频网站| 成人免费黄色网页| 久久91亚洲精品中文字幕| 欧美激情20| 成人国内精品久久久久一区| aiai久久| 亚洲欧美日韩精品在线| 国产综合网站| 男女爽爽爽视频| 国产精品白丝jk黑袜喷水| 亚洲蜜桃精久久久久久久久久久久| 国产女人18毛片水真多成人如厕| 欧美一区免费观看| 色偷偷88欧美精品久久久| 国产女人18毛片水真多| 日韩精品视频中文在线观看| 欧洲不卡av| 欧美中文字幕在线播放| 91精品一区| 日本在线视频一区| 欧美另类亚洲| 91精品无人成人www| 不卡的av中国片| 99久久精品久久亚洲精品| 精品国产91乱高清在线观看| 国产又大又长又粗| 亚洲人在线观看| 麻豆视频在线观看免费网站黄| 国产日韩欧美在线| 国产成人精品一区二区免费看京| 狠狠干视频网站| 久久福利资源站| 日本精品在线观看视频| 午夜一区二区三区视频| 国产免费高清av| 在线观看不卡av| 日本三级一区| 国产传媒一区| 午夜久久一区| 一区二区三区欧美精品| 国产三区在线成人av| 日韩欧美中文字幕一区二区| 日韩欧美在线观看一区二区三区| 成人在线观看免费| 欧美在线免费观看| 精品三级av在线导航| 777久久精品一区二区三区无码| 蜜臀精品久久久久久蜜臀| 亚洲最大成人网站| 精品成人乱色一区二区| 免费国产精品视频| 欧美日韩xxxxx| 亚洲超碰在线观看| 欧美黄网在线观看| 国产一区二区三区综合| 亚洲一级生活片| 777xxx欧美| 国产精品实拍| 亚洲永久免费观看| 自由日本语亚洲人高潮| 四川一级毛毛片| 亚洲三级免费电影| 国产特级aaaaaa大片| 欧美成人在线免费视频| 九九九九九九精品任你躁| 欧美大片免费播放| 国产成人精品午夜视频免费 | 国内精品99| 性高潮免费视频| 亚洲国产成人va在线观看天堂| 亚洲福利在线观看视频| 色综合久久久久久中文网| 97超碰成人| 免费毛片网站在线观看| 99久久99久久精品免费看蜜桃| 九九热在线视频播放| 亚洲午夜未满十八勿入免费观看全集| 韩国美女久久| 亚洲人成网站在线观看播放| 久久精品国产99| 91在线播放观看| 亚洲第一视频网站| 亚洲最大网站| 一区二区三区四区视频在线观看 | 欧美四级电影在线观看| 日本中文在线观看| ts人妖另类在线| 先锋影音久久| 精品人体无码一区二区三区| 91精品国产高清一区二区三区| 日本成人不卡| 久久精品日产第一区二区三区精品版 | 国产又粗又猛又色又| 久久的精品视频| 国产欧美一区二区三区米奇| 日韩一级在线免费观看| 中文字幕第一页久久| 亚洲av无码国产精品永久一区| 国模私拍视频一区| 国产精品三级| 国产一级成人av| 成人写真福利网| 国产一区美女| 亚洲精品视频大全| 欧美挠脚心视频网站| 丰满诱人av在线播放| 三区精品视频| 国产精品系列在线播放| 天天干天天干天天干天天| 日韩视频在线一区| 麻豆成人入口| 国产永久免费网站| 岛国av一区二区| 久久日韩视频| 欧美二区在线看| 国产一区二区三区免费在线观看| 99免费在线观看| 在线国产精品视频| 国产精品99久久免费观看| 手机在线免费观看毛片| 亚洲福利一二三区| 蜜桃视频在线观看www社区| 精品免费日产一区一区三区免费| 美腿丝袜亚洲三区| 国产精品500部|