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

.Net泛型類的學習總結(jié)

開發(fā) 后端
.Net泛型類的學習過程中,我們首先要明白.Net泛型類的概念以及.Net泛型類的相關(guān)的使用規(guī)范,那么本文就向你詳細介紹這方面的內(nèi)容。

.Net泛型類的學習首先我們來看看什么是.Net泛型類?帶有“類型參數(shù)”的類稱為“泛型類”。那么如果使用.Net泛型類,則可為每個這樣的參數(shù)提供“類型變量”,從而從.Net泛型類生成一個“構(gòu)造類”。之后可以聲明類型為構(gòu)造類的變量,創(chuàng)建構(gòu)造類的實例,并將它分配給該變量。除類以外,您還可以定義和使用泛型結(jié)構(gòu)、接口、過程和委托。下面我們就來看看.net泛型類的一些聲明和以及.Net泛型類創(chuàng)建的實例情況。

.Net泛型類聲明

泛型類聲明是一種類的聲明,它需要提供類型實參才能構(gòu)成實際類型。

類聲明可以有選擇地定義類型形參:

  1. class-declaration:  
  2. attributesopt    
  3.  class-modifiersopt    
  4.  class   identifier    
  5.  type-parameter-listopt    
  6.  class-baseopt  
  7. type-parameter-constraints-clausesopt   
  8.   class-body   ;opt 

只有提供了一個 type-parameter-list,才可以為這個類聲明提供 type-parameter-constraints-clauses。

提供了 type-parameter-list 的類聲明是一個泛型類聲明。此外,任何嵌套在泛型類聲明或泛型結(jié)構(gòu)聲明中的類本身就是一個泛型類聲明,因為必須為包含類型提供類型形參才能創(chuàng)建構(gòu)造類型。

除了明確指出的地方外,泛型類聲明與非泛型類聲明遵循相同的規(guī)則。泛型類聲明可嵌套在非泛型類聲明中。

使用構(gòu)造類型 (constructed type)引用泛型類。給定下面的泛型類聲明

  1. class List﹤T﹥ {} 

List﹤T﹥、List﹤int﹥ 和 List﹤List﹤string﹥﹥ 就是其構(gòu)造類型的一些示例。使用一個或多個類型形參的構(gòu)造類型(例如 List﹤T﹥)稱為開放構(gòu)造類型 (open constructed type)。不使用類型形參的構(gòu)造類型(例如 List﹤int﹥)稱為封閉構(gòu)造類型 (closed constructed type)。

泛型類型可根據(jù)類型形參的數(shù)目進行“重載”;這就是說,同一命名空間或外層類型聲明中的兩個類型聲明可以使用相同標識符,只要這兩個聲明具有不同數(shù)目的類型形參即可。

  1. class C {}  
  2.  
  3. class C﹤V﹥ {}  
  4.  
  5. struct C﹤U,V﹥ {} // Error, C with two type parameters defined twice  
  6.  
  7. class C﹤A,B﹥ {}  // Error, C with two type parameters defined twice  

類型名稱解析、簡單名稱解析和成員訪問、過程中使用的類型查找規(guī)則均會考慮類型形參的數(shù)目。

泛型類聲明的基接口必須滿足唯一性規(guī)則。

.Net泛型類之類型形參

類型形參可在類聲明中提供。每個類型形參都是一個簡單標識符,代表一個為創(chuàng)建構(gòu)造類型而提供的類型實參的占位符。類型形參是將來提供的類型的形式占位符。而類型實參是在創(chuàng)建構(gòu)造類型時替換類型形參的實際類型。

  1. type-parameter-list:  
  2. ﹤   type-parameters   ﹥  
  3.  
  4. type-parameters:  
  5. attributesopt   type-parameter  
  6. type-parameters   ,   attributesopt   type-parameter  
  7.  
  8. type-parameter:  
  9. identifier  

類聲明中的每個類型形參在該類的聲明空間中定義一個名稱。因此,它不能與另一個類型形參或該類中聲明的成員具有相同的名稱。類型形參不能與類型本身具有相同的名稱。

類上的類型形參的作用域包括 class-base、type-parameter-constraints-clauses 和 class-body。與類的成員不同,此作用域不會擴展到派生類。在其作用域中,類型形參可用作類型。

  1. type:  
  2. value-type  
  3. reference-type  
  4. type-parameter 

由于類型形參可使用許多不同的實際類型實參進行實例化,因此類型形參具有與其他類型稍微不同的操作和限制。這包括:

·不能直接使用類型形參聲明基類或接口

·類型形參上的成員查找規(guī)則取決于應用到該類型形參的約束(如果有)。

·類型形參的可用轉(zhuǎn)換取決于應用到該類型形參的約束(如果有)。

·如果事先不知道由類型形參給出的類型是引用類型不能將標識null 轉(zhuǎn)換為該類型。不過,可以改為使用默認值表達式。此外,具有由類型形參給出的類型的值可以使用 == 和 != 與null 進行比較,除非該類型形參具有值類型約束。

·僅當類型形參受 constructor-constraint 或值類型約束的約束時,才能將 new 表達式與類型形參聯(lián)合使用。

·不能在屬性中的任何位置上使用類型形參。

·不能在成員訪問或類型名稱中使用類型形參標識靜態(tài)成員或嵌套類型。

·在不安全代碼中,類型形參不能用作 unmanaged-type。

作為類型,類型形參純粹是一個編譯時構(gòu)造。在運行時,每個類型形參都綁定到一個運行時類型,運行時類型是通過向泛型類型聲明提供類型實參來指定的。因此,使用類型形參聲明的變量的類型在運行時將是封閉構(gòu)造類型。涉及類型形參的所有語句和表達式的運行時執(zhí)行都使用作為該形參的類型實參提供的實際類型。

.Net泛型類之實例類型

每個類聲明都有一個關(guān)聯(lián)的構(gòu)造類型,即實例類型 (instance type)。對于泛型類聲明,實例類型是通過從該類型聲明創(chuàng)建構(gòu)造類型來構(gòu)成的,所提供的每個類型實參替換對應的類型形參。由于實例類型使用類型形參,因此只能在類型形參的作用域中使用該實例類型;也就是在類聲明的內(nèi)部。對于在類聲明中編寫的代碼,實例類型為 this 的類型。對于非泛型類,實例類型就是所聲明的類。下面顯示幾個類聲明以及它們的實例類型: 

  1. class A﹤T﹥   // instance type: A﹤T﹥  
  2. {  
  3. class B {}    // instance type: A﹤T﹥.B  
  4.  
  5. class C﹤U﹥ {}// instance type: A﹤T﹥.C﹤U﹥  
  6. }  
  7.  
  8. class D {}   // instance type: D  

.Net泛型類之基規(guī)范

類聲明中指定的基類可以是構(gòu)造類類型。基類本身不能是類型形參,但在其作用域中可以包含類型形參。

  1. class Extend﹤V﹥: V {}    
  2.  
  3.  // Error, type parameter used as base class  

泛型類聲明不能使用 System.Attribute 作為直接或間接基類。

類聲明中指定的基接口可以是構(gòu)造接口類型。基接口本身不能是類型形參,但在其作用域中可以包含類型形參。下面的代碼演示類實現(xiàn)和擴展構(gòu)造類型的方法:

  1. class C﹤U,V﹥ {}  
  2.  
  3. interface I1﹤V﹥ {}  
  4.  
  5. class D: C﹤string,int﹥, I1﹤string﹥ {}  
  6.  
  7. class E﹤T﹥: C﹤int,T﹥, I1﹤T﹥ {}  

泛型類聲明的基接口必須滿足唯一性規(guī)則。

如果類中的方法重寫或?qū)崿F(xiàn)基類或接口中的方法,則必須為特定類型提供相應的方法。下面的代碼演示如何重寫和實現(xiàn)方法。對此做了進一步的解釋。

  1. class C﹤U,V﹥   
  2. {  
  3. public virtual void M1(U x, List﹤V﹥ y) {}  
  4. }  
  5.  
  6. interface I1﹤V﹥   
  7. {  
  8. V M2(V);  
  9. }  
  10.  
  11. class D: C﹤string,int﹥, I1﹤string﹥   
  12. {  
  13. public override void M1(string x, List﹤int﹥ y) {}  
  14.  
  15. public string M2(string x) {}  
  16. }  
#p#

.Net泛型類的成員

泛型類的所有成員都可以直接或作為構(gòu)造類型的一部分使用任何包容類 (enclosing class) 中的類型形參。當在運行時使用特定的封閉構(gòu)造類型時,所出現(xiàn)的每個類型形參都被替換成為該構(gòu)造類型提供的實際類型實參。例如:

  1. class C﹤V﹥  
  2. {  
  3. public V f1;  
  4. public C﹤V﹥ f2 = null;  
  5.  
  6. public C(V x) {  
  7. this.f1 = x;  
  8. this.f2 = this;  
  9. }  
  10. }  
  11.  
  12. class Application  
  13. {  
  14. static void Main() {  
  15. C﹤int﹥ x1 = new C﹤int﹥(1);  
  16. Console.WriteLine(x1.f1);  // Prints 1  
  17.  
  18. C﹤double﹥ x2 = new C﹤double﹥(3.1415);  
  19. Console.WriteLine(x2.f1);  // Prints 3.1415  
  20. }  
  21. }  

在實例函數(shù)成員中,類型 this 是包含這些成員的聲明的實例類型。

除了使用類型形參作為類型以外,泛型類聲明中的成員與非泛型類的成員遵循相同的規(guī)則。下面幾小節(jié)將討論適用于特定種類的成員的附加規(guī)則。

.Net泛型類中的靜態(tài)字段

泛型類聲明中的靜態(tài)變量在相同封閉構(gòu)造類型的所有實例之間共享,但是不會在不同封閉構(gòu)造類型的實例之間共享。不管靜態(tài)變量的類型是否涉及任何類型形參,這些規(guī)則都適用。

例如:

  1. class C﹤V﹥  
  2. {  
  3. static int count = 0;  
  4.  
  5. public C() {  
  6. count++;  
  7. }  
  8.  
  9. public static int Count {  
  10. get { return count; }  
  11. }  
  12. }  
  13.  
  14. class Application  
  15. {  
  16. static void Main() {  
  17. C﹤int﹥ x1 = new C﹤int﹥();  
  18. Console.WriteLine(C﹤int﹥.Count);  // Prints 1  
  19.  
  20. C﹤double﹥ x2 = new C﹤double﹥();  
  21. Console.WriteLine(C﹤int﹥.Count);  // Prints 1  
  22.  
  23. C﹤int﹥ x3 = new C﹤int﹥();  
  24. Console.WriteLine(C﹤int﹥.Count);  // Prints 2  
  25. }  
  26. }  

.Net泛型類中的靜態(tài)構(gòu)造函數(shù)

泛型類中的靜態(tài)構(gòu)造函數(shù)用于初始化靜態(tài)字段,并為從該泛型類聲明創(chuàng)建的每個不同封閉構(gòu)造類型執(zhí)行其他初始化操作。泛型類型聲明的類型形參處于作用域中,并且可在靜態(tài)構(gòu)造函數(shù)的函數(shù)體中使用。

新的封閉構(gòu)造類類型在***次發(fā)生下列任一情況時進行初始化:

·創(chuàng)建該封閉構(gòu)造類型的實例。

·引用該封閉構(gòu)造類型的任何靜態(tài)成員。

為了初始化新的封閉構(gòu)造類類型,需要先為該特定的封閉構(gòu)造類型創(chuàng)建一組新的靜態(tài)字段。將其中的每個靜態(tài)字段初始化為默認值。下一步,為這些靜態(tài)字段執(zhí)行靜態(tài)字段初始值設(shè)定項。***,執(zhí)行靜態(tài)構(gòu)造函數(shù)。

由于靜態(tài)構(gòu)造函數(shù)只為每個封閉構(gòu)造類類型執(zhí)行一次,因此對于無法通過約束在編譯時進行檢查的類型形參來說,此處是進行運行時檢查的方便位置。例如,下面的類型使用靜態(tài)構(gòu)造函數(shù)檢查類型實參是否為一個枚舉:

  1. class Gen﹤T﹥ where T: struct 
  2. {  
  3. static Gen() {  
  4. if (!typeof(T).IsEnum) {  
  5.    throw new ArgumentException("T must be an enum");  
  6. }  
  7. }  

.Net泛型類之訪問受保護成員

在泛型類聲明中,通過從該泛型類構(gòu)造的任何類類型的實例,可以對繼承的受保護實例成員進行訪問。具體而言,指定的用于訪問 protected 和 protected internal 實例成員的規(guī)則通過下面針對泛型的規(guī)則進行了擴充:

在泛型類 G 中,如果 E 的類型是從 G 構(gòu)造的類類型或從 G 構(gòu)造的類類型繼承的類類型,則使用 E.M 形式的 primary-expression 訪問繼承的受保護實例成員 M 是允許的。

在下面的示例中

  1. class C﹤T﹥  
  2. {  
  3. protected T x;  
  4. }  
  5.  
  6. class D﹤T﹥: C﹤T﹥  
  7. {  
  8. static void F() {  
  9. D﹤T﹥ dt = new D﹤T﹥();  
  10. D﹤int﹥ di = new D﹤int﹥();  
  11. D﹤string﹥ ds = new D﹤string﹥();  
  12. dt.x = default(T);  
  13. di.x = 123;  
  14. ds.x = "test";  
  15. }  
  16. }  

對 x 的三個賦值是允許的,因為它們?nèi)纪ㄟ^從該泛型類型構(gòu)造的類類型的實例進行。

.Net泛型類中的重載

泛型類聲明中的方法、構(gòu)造函數(shù)、索引器和運算符可以被重載。雖然聲明的簽名必須唯一,但是在替換類型實參時可能會導致出現(xiàn)完全相同的簽名。在這樣的情況下,重載解析的附加規(guī)則將挑選最明確的
成員。

下面的示例根據(jù)此規(guī)則演示有效和無效的重載:

  1. interface I1﹤T﹥ {}  
  2.  
  3. interface I2﹤T﹥ {}  
  4.  
  5. class G1﹤U﹥  
  6. {  
  7. int F1(U u); // Overload resulotion for G﹤int﹥.F1  
  8. int F1(int i);   // will pick non-generic  
  9.  
  10. void F2(I1﹤U﹥ a); // Valid overload  
  11. void F2(I2﹤U﹥ a);  
  12. }  
  13.  
  14. class G2﹤U,V﹥  
  15. {  
  16. void F3(U u, V v);// Valid, but overload resolution for  
  17. void F3(V v, U u);// G2﹤int,int﹥.F3 will fail  
  18.  
  19. void F4(U u, I1﹤V﹥ v); // Valid, but overload resolution for    
  20.    void F4(I1﹤V﹥ v, U u);// G2﹤I1﹤int﹥,int﹥.F4 will fail  
  21.  
  22. void F5(U u1, I1﹤V﹥ v2); // Valid overload  
  23. void F5(V v1, U u2);  
  24.  
  25. void F6(ref U u); // valid overload  
  26. void F6(out V v);  
  27. }  

形參數(shù)組方法和類型形參

可以在形參數(shù)組的類型中使用類型形參。例如,給定下面的聲明

  1. class C﹤V﹥  
  2. {  
  3. static void F(int x, int y, params V[] args);  

對該方法的如下展開形式的調(diào)用:

  1. C﹤int﹥.F(10, 20);  
  2. C﹤object﹥.F(10, 20, 30, 40);  
  3. C﹤string﹥.F(10, 20, "hello""goodbye"); 

完全對應于:

  1. C﹤int﹥.F(10, 20, new int[] {});  
  2. C﹤object﹥.F(10, 20, new object[] {30, 40});  
  3. C﹤string﹥.F(10, 20, new string[] {"hello""goodbye"} ); 

.Net泛型類之重寫和泛型類

和往常一樣,泛型類中的函數(shù)成員可以重寫基類中的函數(shù)成員。在確定被重寫的基成員時,必須通過替換類型實參來確定基類的成員。一旦確定了基類的成員,重寫規(guī)則就與非泛型類
相同。

下面的示例演示重寫規(guī)則如何在存在泛型的情況下起作用:

  1. abstract class C﹤T﹥  
  2. {  
  3. public virtual T F() {}  
  4.  
  5. public virtual C﹤T﹥ G() {}  
  6.  
  7. public virtual void H(C﹤T﹥ x) {}  
  8. }  
  9.  
  10. class D: C﹤string﹥  
  11. {  
  12. public override string F() {}    // Ok  
  13.  
  14. public override C﹤string﹥ G() {} // Ok  
  15.  
  16. public override void H(C﹤T﹥ x) {} // Error, should be C﹤string﹥  
  17. }  
  18.  
  19. class E﹤T,U﹥: C﹤U﹥  
  20. {  
  21. public override U F() {}// Ok  
  22.  
  23. public override C﹤U﹥ G() {}  // Ok  
  24.  
  25. public override void H(C﹤T﹥ x) {} // Error, should be C﹤U﹥  
  26. }  

.Net泛型類中的運算符

泛型類聲明可以定義運算符,所遵循的規(guī)則與非泛型類聲明相同。運算符聲明中使用類聲明的實例類型的方式必須與運算符的正常使用規(guī)則類似,具體如下:

·一元運算符必須以該實例類型的單個參數(shù)為操作對象。一元的 ++ 和 -- 運算符必須返回該實例類型或從該實例類型派生的類型。

·二元運算符的參數(shù)中必須至少有一個屬于該實例類型。

·轉(zhuǎn)換運算符的形參類型或返回類型必須屬于該實例類型。

下面演示泛型類中的有效運算符聲明的一些示例:

  1. class X﹤T﹥  
  2. {  
  3. public static X﹤T﹥ operator ++(X﹤T﹥ operand) {}  
  4.  
  5. public static int operator *(X﹤T﹥ op1, int op2) {}  
  6.  
  7. public static explicit operator X﹤T﹥(T value) {}  
  8. }  

對于從源類型 S 轉(zhuǎn)換到目標類型 T 的轉(zhuǎn)換運算符,在應用指定的規(guī)則時,與 S 或 T 關(guān)聯(lián)的任何類型形參都被視為與其他類型沒有繼承關(guān)系的唯一類型,并忽略對那些類型形參的所有約束。

在下面的示例中

  1. class C﹤T﹥ {}  
  2.  
  3. class D﹤T﹥: C﹤T﹥  
  4. {  
  5. public static implicit operator C﹤int﹥(D﹤T﹥ value) {}  // Ok  
  6.  
  7. public static implicit operator C﹤string﹥(D﹤T﹥ value) {} // Ok  
  8.  
  9. public static implicit operator C﹤T﹥(D﹤T﹥ value) {} // Error  
  10. }  

前兩個運算符聲明是允許的,T 和 int 以及 string 分別被視為沒有關(guān)系的唯一類型。但是,第三個運算符是錯誤的,因為 C﹤T﹥ 是 D﹤T﹥ 的基類。

對于某些類型實參,可以聲明這樣的運算符,即這些運算符指定了已經(jīng)作為預定義轉(zhuǎn)換而存在的轉(zhuǎn)換。在下面的示例中

  1. struct Convertible﹤T﹥  
  2. {  
  3. public static implicit operator Convertible﹤T﹥(T value) {}  
  4.  
  5. public static explicit operator T(Convertible﹤T﹥ value) {}  
  6. }  

當把類型 object 指定為 T 的類型實參時,第二個運算符將聲明一個已經(jīng)存在的轉(zhuǎn)換(存在從任何類型到類型 object 的隱式轉(zhuǎn)換,因此也存在顯式轉(zhuǎn)換)。

在兩個類型之間存在預定義轉(zhuǎn)換的情況下,這些類型之間的任何用戶定義的轉(zhuǎn)換將被忽略。具體而言:

·如果存在從類型 S 到類型T 的預定義隱式轉(zhuǎn)換,則從S 到T 的所有用戶定義的轉(zhuǎn)換(隱式或顯式)將被忽略。

·如果存在從類型S 到類型T 的預定義顯式轉(zhuǎn)換,則從 S 到T 的所有用戶定義的顯式轉(zhuǎn)換將被忽略。但是,仍然會考慮從 S 到 T 的用戶定義的隱式轉(zhuǎn)換。

對于除 object 以外的所有類型,上面的 Convertible﹤T﹥ 類型聲明的運算符都不會與預定義的轉(zhuǎn)換發(fā)生沖突。例如:

  1. void F(int i, Convertible﹤int﹥ n) {  
  2. i = n; // Error  
  3. i = (int)n;    // User-defined explicit conversion  
  4. n = i; // User-defined implicit conversion  
  5. n = (Convertible﹤int﹥)i;    // User-defined implicit conversion  

但是對于類型 object,除了下面這個特例之外,預定義的轉(zhuǎn)換將在其他所有情況下隱藏用戶定義的
轉(zhuǎn)換:

  1. void F(object o, Convertible﹤object﹥ n) {  
  2. o = n; // Pre-defined boxing conversion  
  3. o = (object)n; // Pre-defined boxing conversion  
  4. n = o; // User-defined implicit conversion  
  5. n = (Convertible﹤object﹥)o; // Pre-defined unboxing conversion  

.Net泛型類中的嵌套類型

泛型類聲明可以包含嵌套的類型聲明。包容類的類型形參可以在嵌套類型中使用。嵌套類型聲明可以包含僅適用于該嵌套類型的附加類型形參。

泛型類聲明中包含的每個類型聲明都隱式地是泛型類型聲明。在編寫對嵌套在泛型類型中的類型的引用時,必須指定其包容構(gòu)造類型(包括其類型實參)。但是可在外層類中不加限定地使用嵌套類型;在構(gòu)造嵌套類型時可以隱式地使用外層類的實例類型。下面的示例演示三種不同的引用從 Inner 創(chuàng)建的構(gòu)造類型的正確方法;前兩種方法是等效的:

  1. class Outer﹤T﹥  
  2. {  
  3.    class Inner﹤U﹥  
  4. {  
  5. public static void F(T t, U u) {}  
  6. }  
  7.  
  8. static void F(T t) {  
  9. Outer﹤T﹥.Inner﹤string﹥.F(t, "abc");  // These two statements have  
  10. Inner﹤string﹥.F(t, "abc"); // the same effect  
  11.  
  12. Outer﹤int﹥.Inner﹤string﹥.F(3, "abc");  // This type is different  
  13.  
  14. Outer.Inner﹤string﹥.F(t, "abc");// Error, Outer needs type arg  
  15. }  
  16. }  

嵌套類型中的類型形參可以隱藏外層類型中聲明的成員或類型形參,但這是一種不好的編程風格:

  1. class Outer﹤T﹥  
  2. {  
  3. class Inner﹤T﹥  // Valid, hides Outer’s T  
  4. {  
  5. public T t;  // Refers to Inner’s T  
  6. }  
  7. }  
  8.  

.Net泛型類的聲明以及使用中會碰到的一些概念及應用的基本內(nèi)容就向你介紹到這里,希望對你了解和學習.Net泛型類有所幫助。

【編輯推薦】

  1. C# 泛型使用心得淺析
  2. C# 泛型集合概念及應用淺析
  3. C# 泛型集合實例應用淺析
  4. 淺析C# Dictionary泛型集合
  5. C# 泛型編程基礎(chǔ)實例詳解
責任編輯:仲衡 來源: 博客園
相關(guān)推薦

2009-09-25 10:03:51

Java泛型

2010-01-06 10:43:49

.NET Framew

2012-02-16 10:36:43

Java

2009-07-30 14:00:21

ASP.NET 2.0

2012-04-24 09:55:29

.NET

2025-02-17 00:00:55

NET開發(fā)依賴注入

2009-08-24 15:38:21

C# 泛型數(shù)組

2021-09-29 18:17:30

Go泛型語言

2009-09-02 18:03:19

C#實現(xiàn)泛型類

2009-08-24 15:50:23

C# 泛型C# 泛型委托

2010-01-20 18:22:37

VB.NET泛型類型

2010-01-05 17:16:28

.NET Framew

2009-08-24 17:07:09

C# 泛型

2023-12-25 09:35:28

C#泛型.Net編程語言

2021-06-17 06:51:32

Java泛型Java編程

2009-08-17 09:24:25

ASP.NET控件

2009-08-24 14:26:42

C# 泛型類

2022-04-15 09:55:59

Go 泛型Go 程序函數(shù)

2009-08-25 13:57:09

C#泛型集合類型

2017-03-06 16:51:52

Java泛型實現(xiàn)
點贊
收藏

51CTO技術(shù)棧公眾號

国产乱妇乱子在线播视频播放网站| 无码人妻一区二区三区线| 日韩免费一级| 亚洲1区2区3区4区| 日韩av一区二区三区美女毛片| 一个人看的www日本高清视频| 欧美黄在线观看| 精品无人区太爽高潮在线播放 | 欧美视频在线一区| 无码人妻精品一区二区三区99v| 天堂av2024| 久久国产福利国产秒拍| 韩国v欧美v日本v亚洲| 免费91在线观看| 欧美美女啪啪| 欧美一区二区三区不卡| 美女福利视频在线| 永久免费网站在线| 国产欧美日韩另类一区| 国产91社区| 7777久久亚洲中文字幕| 国产欧美不卡| 久久99久久亚洲国产| 亚洲国产日韩一区无码精品久久久| 亚洲欧洲国产精品一区| 欧美亚洲高清一区| 国产91xxx| 怡红院在线观看| 国产精品网站在线| 久久精品一二三区| 亚洲福利在线观看视频| 久久99精品一区二区三区三区| 国产69久久精品成人| 青青青在线视频| 欧美激情国产在线| 一级做a爰片久久毛片美女图片| 亚洲av人人澡人人爽人人夜夜| 亚洲成人高清| 欧美日韩国产综合一区二区 | 在线国产伦理一区| 成年网站在线| 久久久不卡影院| 国产九色91| 亚洲精品久久久蜜桃动漫 | 丝袜熟女一区二区三区| 亚洲精品一区二区三区中文字幕| 91精品国产一区二区三区| 三上悠亚在线一区二区| 99riav视频一区二区| 日韩欧美aⅴ综合网站发布| 男女猛烈激情xx00免费视频| 另类视频在线| 亚洲国产一区二区视频| 69sex久久精品国产麻豆| 91一区二区三区在线| 自拍偷拍国产亚洲| 免费看av软件| 国产美女在线观看| 亚洲猫色日本管| 国产欧美123| 国精一区二区三区| 亚洲国产成人tv| 成人中文字幕在线播放| 中文字幕在线看片| 黄色91在线观看| 男人日女人bb视频| 都市激情亚洲一区| 欧美亚洲综合色| 亚洲欧美日本一区二区三区| 亚洲免费资源| 精品久久人人做人人爽| 日韩av无码一区二区三区不卡| 欧美日韩麻豆| 亚洲无亚洲人成网站77777| 人与嘼交av免费| 国产精品精品国产一区二区| 不卡av电影在线观看| 国产一级性生活| 先锋影音久久久| 国产精品免费在线免费| 国产精品系列视频| 成人亚洲一区二区一| 久久精品日产第一区二区三区乱码| 男人久久精品| 综合久久综合久久| 欧美啪啪免费视频| 91精品xxx在线观看| 欧美日韩精品综合在线| 中文字幕一区二区三区人妻在线视频| 日韩一区二区三区色| 日韩毛片中文字幕| 日本美女黄色一级片| 欧美日韩99| 国产va免费精品高清在线| 97精品久久人人爽人人爽| 国产91对白在线观看九色| 欧美另类高清视频在线| 麻豆传媒视频在线观看| 亚洲丰满少妇videoshd| 最近中文字幕一区二区| 97品白浆高清久久久久久| 亚洲欧美中文日韩v在线观看| 91久久久久久久久久久久久久| 精品福利电影| 国产日韩精品视频| 五月婷婷激情在线| 国产精品精品国产色婷婷| 成人毛片一区二区| 99精品女人在线观看免费视频| 亚洲国产小视频在线观看| 精品国产大片大片大片| 国产亚洲成人一区| 91精品黄色| av在线免费观看网| 欧美色另类天堂2015| 黄色三级视频在线播放| 欧美一区二区三区激情视频 | 青青草免费在线视频观看| 天堂电影一区| 精品国产乱码久久久久久夜甘婷婷| 精品人妻中文无码av在线| 亚洲国产免费看| 亚洲一区二区三| av大片在线看| 欧美性xxxxxxxxx| 中文字幕在线国产| 中文视频一区| 国产欧亚日韩视频| 九色在线视频| 日韩欧美在线免费观看| 波多野结衣办公室双飞| 亚洲午夜精品一区 二区 三区| 国产精品久久久久久久午夜| 日本福利午夜视频在线| 香蕉加勒比综合久久| 一级全黄裸体片| 欧美777四色影| 91在线免费观看网站| 9色在线观看| 在线免费观看日韩欧美| 亚洲自拍偷拍一区二区 | 一区二区三区网址| 亚洲都市激情| 欧美一级高清免费| 性感美女视频一二三| 亚洲大片免费看| 李丽珍裸体午夜理伦片| 在线欧美亚洲| 亚洲高清在线精品| 国产精品77777竹菊影视小说| 亚洲国产另类 国产精品国产免费| 91狠狠综合久久久| 青青草视频一区| 四虎永久在线精品免费一区二区| 欧美www.| 日韩小视频在线| 国产欧美久久久| 中文人妻av久久人妻18| 亚洲第一色网站| 91影院在线免费观看| 日韩黄色短视频| 国产一区在线电影| 4438全国成人免费| 国产一区精品| 精品视频色一区| 91ts人妖另类精品系列| 亚洲91av| 日韩一区二区三区视频在线| 久久免费播放视频| 99久久久免费精品国产一区二区| 动漫av网站免费观看| 国产成人一区| 成人午夜激情网| 日本色护士高潮视频在线观看| 亚洲第一偷拍网| 日本视频免费观看| 国产精品久久毛片a| 久久出品必属精品| 国产精品美女久久久浪潮软件| 欧洲精品码一区二区三区免费看| 国语自产精品视频在线看抢先版结局 | 色阁综合伊人av| 国产夫妻性生活视频| 无码av免费一区二区三区试看| 三上悠亚影音先锋| 精品一区二区三区视频在线观看| 成年人深夜视频| 欧美猛男男男激情videos| 国产日本欧美一区| bl视频在线免费观看| 亚洲午夜激情免费视频| 国产理论视频在线观看| 天天综合色天天综合| 日本猛少妇色xxxxx免费网站| 国产成人av自拍| 青青在线视频免费| 欧美激情视频一区二区三区免费| 韩国成人动漫在线观看| 玖玖精品在线| 91精品国产91久久久久久久久| 91短视频版在线观看www免费| 精品久久久网站| 91久久久久久久久久久久| 亚洲尤物视频在线| 日本污视频网站| eeuss国产一区二区三区 | 久久夜色精品国产噜噜亚洲av| 综合久久国产九一剧情麻豆| 泷泽萝拉在线播放| 国产精品亚洲综合一区在线观看| 日本男人操女人| 精品电影一区| 男女爱爱视频网站| 成人a'v在线播放| 精选一区二区三区四区五区| 欧美成人精品午夜一区二区| 国产成人综合av| 第一中文字幕在线| 久久中文字幕一区| av电影在线观看| 亚洲欧美中文另类| 人妻偷人精品一区二区三区| 制服.丝袜.亚洲.中文.综合| 69视频免费看| 欧美午夜精品久久久久久浪潮| 久久久久无码国产精品不卡| 亚洲视频图片小说| 日本一区二区视频在线播放| www亚洲一区| a天堂视频在线观看| 岛国av在线一区| 4438x全国最大成人| 激情五月播播久久久精品| 成人性生生活性生交12| 久久国产日韩| 一本大道熟女人妻中文字幕在线 | 国产一级二级三级在线观看| 日韩精品中文字幕在线观看| 日韩一级片免费| 亚洲国产美女精品久久久久∴| 亚洲免费黄色片| 欧美成人video| aaa一区二区三区| 日韩丝袜美女视频| 国产白浆在线观看| 日韩欧美激情一区| 亚洲精品97久久中文字幕| 欧美一区二区免费| www.蜜臀av.com| 欧美精品一区二区三区蜜臀| 亚洲免费成人在线| 亚洲国产一区二区三区四区| 天堂网www中文在线| 亚洲国产中文字幕在线观看| 亚洲 小说区 图片区 都市| 亚洲精品电影网| 欧美日韩视频精品二区| 亚洲三级免费看| 日本视频在线| 欧美区二区三区| 国产精品论坛| 国产成人精品电影久久久| 日本一区二区电影| 成人美女av在线直播| 玖玖玖视频精品| 国内精品国语自产拍在线观看| 亚洲素人在线| 亚洲人体一区| 国内精品福利| 男人操女人免费软件| 奇米888四色在线精品| 日本在线播放一区二区| 国产成人在线看| 日韩一级视频在线观看| 久久婷婷成人综合色| 亚洲欧洲综合网| 亚洲夂夂婷婷色拍ww47| 日韩精品一区不卡| 337p亚洲精品色噜噜狠狠| 亚洲国产精品无码久久| 亚洲精品中文字幕女同| 天堂中文а√在线| 久久久久久噜噜噜久久久精品| 中文字幕不卡三区视频| 国产日韩精品在线观看| 久草精品视频| 亚洲欧洲日本国产| 欧美区国产区| 无码aⅴ精品一区二区三区浪潮| 免费精品视频在线| 欧美激情一区二区三区p站| 国产色产综合产在线视频| 九九免费精品视频| 一本久久a久久精品亚洲| 国产免费叼嘿网站免费| 日韩电影中文字幕| 国产调教视频在线观看| 51色欧美片视频在线观看| 成人精品在线| 欧美精品亚洲精品| 欧美一区不卡| 在线免费视频a| 成人久久视频在线观看| 青青青视频在线播放| 婷婷成人激情在线网| 亚洲综合精品国产一区二区三区| 日韩av在线导航| 天堂8中文在线| 国产精品亚洲片夜色在线| 欧美美女在线直播| 中文字幕在线视频日韩| 亚洲精品中文字幕在线 | 97av在线播放| 99久久久成人国产精品| 欧美午夜精品久久久久免费视| 国产精品hd| 91精产国品一二三产区别沈先生| 久久综合中文字幕| 国产亚洲成人av| 欧美一区二区三级| 天堂аⅴ在线地址8| 成人国产免费视频| 国产香蕉97碰碰久久人人| 久久这里精品国产99丫e6| 37p粉嫩大胆色噜噜噜| 人人妻人人澡人人爽久久av| 久久久免费人体| 丝袜美腿亚洲色图| 精品伊人久久97| 久久精品国产sm调教网站演员| 麻豆精品国产免费| 日本在线视频www鲁啊鲁| 丝瓜av网站精品一区二区| 亚洲加勒比久久88色综合 | 亚洲美女偷拍久久| 日本免费色视频| 久久毛片高清国产| 五月婷婷中文字幕| 亚洲成人免费在线视频| 日韩三级免费| 成人精品一二区| 欧美一区二区三区久久精品茉莉花| 亚洲老女人av| 亚洲国产精品黑人久久久| 久久久精品毛片| 亚洲少妇激情视频| 日本综合视频| 亚欧洲精品在线视频免费观看| 久久亚洲综合| 成人在线观看免费高清| 欧美天堂亚洲电影院在线播放| 黄色毛片在线观看| 国产97免费视| 日韩欧美综合| 欧美视频亚洲图片| 一区二区三区在线免费视频| 国产精品区在线观看| 国产亚洲精品精华液| 国产无遮挡又黄又爽又色| 亚洲国产精品成人一区二区| 高清精品在线| 日韩福利在线| 久久精品国产亚洲高清剧情介绍 | 不卡av一区二区| 五月天av在线播放| 成人欧美一区二区三区黑人麻豆| 国产三级精品在线观看| 色在人av网站天堂精品| 日本欧美韩国国产| www.xxx亚洲| 中文字幕日韩精品一区 | 日韩成人在线一区| 最近免费观看高清韩国日本大全| 成人短视频下载| 精品久久久久久久久久久久久久久久| 自拍偷拍亚洲在线| 天堂va在线高清一区| 国产在线青青草| 亚洲日本在线a| 天天干天天操av| 国产精品美女主播| 欧美日韩视频一区二区三区| 人人妻人人澡人人爽人人精品| 精品视频在线免费观看| 操喷在线视频| 亚洲a∨一区二区三区| 国产电影一区在线| 中文字幕69页| 精品自在线视频| 欧美人与拘性视交免费看| 日韩 国产 一区| 色综合天天综合网天天狠天天 | 人妻中文字幕一区| 国产精品久久99久久| 午夜精品婷婷| 黄免费在线观看| 精品久久久久久久久久久院品网| 精品无人乱码一区二区三区| 男人天堂新网址| 日本一区二区免费在线|