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

.Net事件

開(kāi)發(fā) 后端
在發(fā)生其他類或?qū)ο箨P(guān)注的事情時(shí),類或?qū)ο罂赏ㄟ^(guò)事件通知它們。發(fā)送(或引發(fā))事件的類稱為“發(fā)行者”,接收(或處理)事件的類稱為“訂戶”。

.NET 事件

事件概述

在發(fā)生其他類或?qū)ο箨P(guān)注的事情時(shí),類或?qū)ο罂赏ㄟ^(guò)事件通知它們。發(fā)送(或引發(fā))事件的類稱為“發(fā)行者”,接收(或處理)事件的類稱為“訂戶”。

  • 特點(diǎn)
    • 發(fā)行者確定何時(shí)引發(fā)事件,訂戶確定執(zhí)行何種操作來(lái)響應(yīng)該事件。
    • 一個(gè)事件可以有多個(gè)訂戶。一個(gè)訂戶可處理來(lái)自多個(gè)發(fā)行者的多個(gè)事件。
    • 沒(méi)有訂戶的事件永遠(yuǎn)不會(huì)被調(diào)用。
    • 事件通常用于通知用戶操作
    • 如果一個(gè)事件有多個(gè)訂戶,當(dāng)引發(fā)該事件時(shí),會(huì)同步調(diào)用多個(gè)事件處理程序,也可以設(shè)置異步調(diào)用事件。
    • 可以利用事件同步線程。
    • 事件是基于 EventHandler 委托和 EventArgs 基類的。

事件的訂閱和取消

如果您想編寫引發(fā)事件時(shí)調(diào)用的自定義代碼,則可以訂閱由其他類發(fā)布的事件。例如,可以訂閱某個(gè)按鈕的“單擊”事件,以使應(yīng)用程序在用戶單擊該按鈕時(shí)執(zhí)行一些有用的操作。
  • 訂閱事件
    • VS IDE 訂閱事件
      • 如果“屬性”窗口不可見(jiàn),請(qǐng)?jiān)?ldquo;設(shè)計(jì)”視圖中,右擊要?jiǎng)?chuàng)建事件處理程序的窗體或控件,然后選擇“屬性”。
      • 在“屬性”窗口的頂部,單擊“事件”圖標(biāo)。
      • 雙擊要?jiǎng)?chuàng)建的事件,Visual C# 會(huì)創(chuàng)建一個(gè)空事件處理程序方法,并將其添加到您的代碼中。或者,您也可以在“代碼”視圖中手動(dòng)添加代碼。
  • 編程方式訂閱事件
    • 定義一個(gè)事件處理程序方法,其簽名與該事件的委托簽名匹配。例如,如果事件基于 EventHandler 委托類型,則下面的代碼表示方法存根

      1. oid HandleCustomEvent(object sender, CustomEventArgs a){  } 
    • 使用加法賦值運(yùn)算符 (+=) 來(lái)為事件附加事件處理程序。在下面的示例中,假設(shè)名為 publisher 的對(duì)象擁有一個(gè)名為 RaiseCustomEvent 的事件。請(qǐng)注意,訂戶類需要引用發(fā)行者類才能訂閱其事件。

  1. publisher.RaiseCustomEvent += HandleCustomEvent; 
  2. publisher.RaiseCustomEvent += new CustomEventHandler(HandleCustomEvent); 

 

  • 匿名方法訂閱事件
    • 使用加法賦值運(yùn)算符 (+=) 來(lái)為事件附加匿名方法。在下面的示例中,假設(shè)名為 publisher 的對(duì)象擁有一個(gè)名為 RaiseCustomEvent 的事件,并且還定義了一個(gè) CustomEventArgs 類以承載某些類型的專用事件信息。請(qǐng)注意,訂戶類需要引用 publisher 才能訂閱其事件。
  1. publisher.RaiseCustomEvent += delegate(object o, CustomEventArgs e) 
  2.     string s = o.ToString() + " " + e.ToString(); 
  3.     Console.WriteLine(s); 
  4. };
  • 取消訂閱

要防止在引發(fā)事件時(shí)調(diào)用事件處理程序,您只需取消訂閱該事件。要防止資源泄露,請(qǐng)?jiān)卺尫庞啈魧?duì)象之前取消訂閱事件,這一點(diǎn)很重要。在取消訂閱事件之前,在發(fā)布對(duì)象中作為該事件的基礎(chǔ)的多路廣播委托會(huì)引用封裝了訂戶的事件處理程序的委托。只要發(fā)布對(duì)象包含該引用,就不會(huì)對(duì)訂戶對(duì)象執(zhí)行垃圾回收。

使用減法賦值運(yùn)算符 (-=) 取消訂閱事件。所有訂戶都取消訂閱某事件后,發(fā)行者類中的事件實(shí)例會(huì)設(shè)置為 null。

  1. publisher.RaiseCustomEvent -= HandleCustomEvent; 

發(fā)布標(biāo)準(zhǔn)事件

下面的過(guò)程演示了如何將符合標(biāo)準(zhǔn) .NET Framework 模式的事件添加到您自己的類和結(jié)構(gòu)中。.NET Framework 類庫(kù)中的所有事件均基于 EventHandler 委托,定義如下。

  1. public delegate void EventHandler(object sender, EventArgs e);
  • 采用 EventHandler 模式發(fā)布事件
    • (如果不需要發(fā)送含事件的自定義數(shù)據(jù),請(qǐng)?zhí)^(guò)此步驟,直接進(jìn)入步驟 3。)在發(fā)行者類和訂戶類均可看見(jiàn)的范圍中聲明類,并添加保留自定義事件數(shù)據(jù)所需的成員。在此示例中,會(huì)返回一個(gè)簡(jiǎn)單字符串。
    •  
      1. public class CustomEventArgs : EventArgs 
      2.     public CustomEventArgs(string s) 
      3.     { 
      4.         msg = s; 
      5.     } 
      6.     private string msg; 
      7.     public string Message 
      8.     { 
      9.         get { return msg; } 
      10.     }  
    • (如果您使用的是 EventHandler 的泛型版本,請(qǐng)?zhí)^(guò)此步驟。)在發(fā)布類中聲明一個(gè)委托。為它指定以 EventHandler 結(jié)尾的名稱。第二個(gè)參數(shù)指定自定義 EventArgs 類型。
    •  
      1. public delegate void CustomEventHandler(object sender, CustomEventArgs a); 
    • 使用以下任一步驟,在發(fā)布類中聲明事件。
      • 如果沒(méi)有自定義 EventArgs 類,事件類型就是非泛型 EventHandler 委托。它無(wú)需聲明,因?yàn)樗言?C# 項(xiàng)目默認(rèn)包含的 System 命名空間中進(jìn)行了聲明
      •  
        1. public event EventHandler RaiseCustomEvent; 
      • 如果使用的是 EventHandler 的非泛型版本,并且您有一個(gè)由 EventArgs 派生的自定義類,請(qǐng)?jiān)诎l(fā)布類中聲明您的事件,并且將您的委托用作類型
      •  
        1. class Publisher 
        2.     public event CustomEventHandler RaiseCustomEvent; 
      • 如果使用的是泛型版本,則不需要自定義委托。相反,應(yīng)將事件類型指定為 EventHandler<CustomEventArgs>,在尖括號(hào)內(nèi)放置您自己的類的名稱。
        1. public event EventHandler<CustomEventArgs> RaiseCustomEvent; 

#p#

引發(fā)派生類中的基類事件

 以下簡(jiǎn)單示例演示了在基類中聲明可從派生類引發(fā)的事件的標(biāo)準(zhǔn)方法。此模式廣泛應(yīng)用于 .NET Framework 基類庫(kù)中的 Windows 窗體類。

在創(chuàng)建可用作其他類的基類的類時(shí),必須考慮如下事實(shí):事件是特殊類型的委托,只可以從聲明它們的類中調(diào)用。派生類無(wú)法直接調(diào)用基類中聲明的事件。盡管有時(shí)您可能希望某個(gè)事件只能通過(guò)基類引發(fā),但在大多數(shù)情形下,您應(yīng)該允許派生類調(diào)用基類事件。為此,您可以在包含該事件的基類中創(chuàng)建一個(gè)受保護(hù)的調(diào)用方法。通過(guò)調(diào)用或重寫此調(diào)用方法,派生類便可以間接調(diào)用該事件。

  1. namespace BaseClassEvents 
  2.     using System; 
  3.     using System.Collections.Generic; 
  4.     public class ShapeEventArgs : EventArgs 
  5.     { 
  6.         private double newArea; 
  7.  
  8.         public ShapeEventArgs(double d) 
  9.         { 
  10.             newArea = d; 
  11.         } 
  12.         public double NewArea 
  13.         { 
  14.             get { return newArea; } 
  15.         } 
  16.     } 
  17.     public abstract class Shape 
  18.     { 
  19.         protected double area; 
  20.  
  21.         public double Area 
  22.         { 
  23.             get { return area; } 
  24.             set { area = value; } 
  25.         } 
  26.         public event EventHandler<ShapeEventArgs> ShapeChanged; 
  27.         public abstract void Draw(); 
  28.         protected virtual void OnShapeChanged(ShapeEventArgs e) 
  29.         { 
  30.             EventHandler<ShapeEventArgs> handler = ShapeChanged; 
  31.             if (handler != null
  32.             { 
  33.                 handler(this, e); 
  34.             } 
  35.         } 
  36.     } 
  37.     public class Circle : Shape 
  38.     { 
  39.         private double radius; 
  40.         public Circle(double d) 
  41.         { 
  42.             radius = d; 
  43.             area = 3.14 * radius; 
  44.         } 
  45.         public void Update(double d) 
  46.         { 
  47.             radius = d; 
  48.             area = 3.14 * radius; 
  49.             OnShapeChanged(new ShapeEventArgs(area)); 
  50.         } 
  51.         protected override void OnShapeChanged(ShapeEventArgs e) 
  52.         { 
  53.             base.OnShapeChanged(e); 
  54.         } 
  55.         public override void Draw() 
  56.         { 
  57.             Console.WriteLine("Drawing a circle"); 
  58.         } 
  59.     } 
  60.     public class Rectangle : Shape 
  61.     { 
  62.         private double length; 
  63.         private double width; 
  64.         public Rectangle(double length, double width) 
  65.         { 
  66.             this.length = length; 
  67.             this.width = width; 
  68.             area = length * width; 
  69.         } 
  70.         public void Update(double length, double width) 
  71.         { 
  72.             this.length = length; 
  73.             this.width = width; 
  74.             area = length * width; 
  75.             OnShapeChanged(new ShapeEventArgs(area)); 
  76.         } 
  77.         protected override void OnShapeChanged(ShapeEventArgs e) 
  78.         { 
  79.             base.OnShapeChanged(e); 
  80.         } 
  81.         public override void Draw() 
  82.         { 
  83.             Console.WriteLine("Drawing a rectangle"); 
  84.         } 
  85.  
  86.     } 
  87.     public class ShapeContainer 
  88.     { 
  89.         List<Shape> _list; 
  90.  
  91.         public ShapeContainer() 
  92.         { 
  93.             _list = new List<Shape>(); 
  94.         } 
  95.  
  96.         public void AddShape(Shape s) 
  97.         { 
  98.             _list.Add(s); 
  99.             s.ShapeChanged += HandleShapeChanged; 
  100.         } 
  101.         private void HandleShapeChanged(object sender, ShapeEventArgs e) 
  102.         { 
  103.             Shape s = (Shape)sender; 
  104.             Console.WriteLine("Received event. Shape area is now {0}", e.NewArea); 
  105.             s.Draw(); 
  106.         } 
  107.     } 
  108.     class Test 
  109.     { 
  110.  
  111.         static void Main(string[] args) 
  112.         { 
  113.             Circle c1 = new Circle(54); 
  114.             Rectangle r1 = new Rectangle(12, 9); 
  115.             ShapeContainer sc = new ShapeContainer(); 
  116.             sc.AddShape(c1); 
  117.             sc.AddShape(r1); 
  118.             c1.Update(57); 
  119.             r1.Update(7, 7); 
  120.             Console.WriteLine(); 
  121.             Console.WriteLine("Press Enter to exit"); 
  122.             Console.ReadLine(); 
  123.         } 
  124.     } 

#p#

實(shí)現(xiàn)接口事件

接口可聲明事件。下面的示例演示如何在類中實(shí)現(xiàn)接口事件。接口事件的實(shí)現(xiàn)規(guī)則與任何接口方法或?qū)傩缘膶?shí)現(xiàn)規(guī)則基本相同。

  • 在類中實(shí)現(xiàn)接口事件

     在類中聲明事件,然后在適當(dāng)?shù)奈恢谜{(diào)用該事件。

  1. public interface IDrawingObject 
  2.     event EventHandler ShapeChanged; 
  3. public class MyEventArgs : EventArgs {…} 
  4. public class Shape : IDrawingObject 
  5.     event EventHandler ShapeChanged; 
  6.     void ChangeShape() 
  7.     { 
  8.         // Do something before the event… 
  9.         OnShapeChanged(new MyEventsArgs(…)); 
  10.         // or do something after the event.  
  11.     } 
  12.     protected virtual void OnShapeChanged(MyEventArgs e) 
  13.     { 
  14.         if(ShapeChanged != null
  15.         { 
  16.            ShapeChanged(this, e); 
  17.         } 
  18.     } 
  19. }

下面的示例演示如何處理以下的不常見(jiàn)情況:您的類是從兩個(gè)以上的接口繼承的,每個(gè)接口都含有同名事件)。在這種情況下,您至少要為其中一個(gè)事件提供顯式接口實(shí)現(xiàn)。為事件編寫顯式接口實(shí)現(xiàn)時(shí),必須編寫 add 和 remove 事件訪問(wèn)器。這兩個(gè)事件訪問(wèn)器通常由編譯器提供,但在這種情況下編譯器不能提供。

您可以提供自己的訪問(wèn)器,以便指定這兩個(gè)事件是由您的類中的同一事件表示,還是由不同事件表示。例如,根據(jù)接口規(guī)范,如果事件應(yīng)在不同時(shí)間引發(fā),則可以將每個(gè)事件與類中的一個(gè)單獨(dú)實(shí)現(xiàn)關(guān)聯(lián)。在下面的示例中,訂戶將形狀引用強(qiáng)制轉(zhuǎn)換為 IShape 或 IDrawingObject,從而確定自己將會(huì)接收哪個(gè) OnDraw 事件。

  1. namespace WrapTwoInterfaceEvents 
  2.     using System; 
  3.     public interface IDrawingObject 
  4.     { 
  5.         event EventHandler OnDraw; 
  6.     } 
  7.     public interface IShape 
  8.     { 
  9.         event EventHandler OnDraw; 
  10.     } 
  11.     public class Shape : IDrawingObject, IShape 
  12.     { 
  13.         event EventHandler PreDrawEvent; 
  14.         event EventHandler PostDrawEvent; 
  15.         event EventHandler IDrawingObject.OnDraw 
  16.         { 
  17.             add { PreDrawEvent += value; } 
  18.             remove { PreDrawEvent -= value; } 
  19.         } 
  20.         event EventHandler IShape.OnDraw 
  21.         { 
  22.             add { PostDrawEvent += value; } 
  23.             remove { PostDrawEvent -= value; } 
  24.         } 
  25.         public void Draw() 
  26.         { 
  27.             EventHandler handler = PreDrawEvent; 
  28.             if (handler != null
  29.             { 
  30.                 handler(thisnew EventArgs()); 
  31.             } 
  32.             Console.WriteLine("Drawing a shape."); 
  33.             handler = PostDrawEvent; 
  34.             if (handler != null
  35.             { 
  36.                 handler(thisnew EventArgs()); 
  37.             } 
  38.         } 
  39.     } 
  40.     public class Subscriber1 
  41.     { 
  42.         public Subscriber1(Shape shape) 
  43.         { 
  44.             IDrawingObject d = (IDrawingObject)shape; 
  45.             d.OnDraw += new EventHandler(d_OnDraw); 
  46.         } 
  47.         void d_OnDraw(object sender, EventArgs e) 
  48.         { 
  49.             Console.WriteLine("Sub1 receives the IDrawingObject event."); 
  50.         } 
  51.     } 
  52.     public class Subscriber2 
  53.     { 
  54.         public Subscriber2(Shape shape) 
  55.         { 
  56.             IShape d = (IShape)shape; 
  57.             d.OnDraw += new EventHandler(d_OnDraw); 
  58.         } 
  59.  
  60.         void d_OnDraw(object sender, EventArgs e) 
  61.         { 
  62.             Console.WriteLine("Sub2 receives the IShape event."); 
  63.         } 
  64.     } 
  65.     public class Program 
  66.     { 
  67.         static void Main(string[] args) 
  68.         { 
  69.             Shape shape = new Shape(); 
  70.             Subscriber1 sub = new Subscriber1(shape); 
  71.             Subscriber2 sub2 = new Subscriber2(shape); 
  72.             shape.Draw(); 
  73.  
  74.             Console.WriteLine("Press Enter to close this window."); 
  75.             Console.ReadLine(); 
  76.         } 
  77.     } 

使用字典存儲(chǔ)事件實(shí)例

accessor-declarations 的一種用法是公開(kāi)大量的事件但不為每個(gè)事件分配字段,而是使用字典來(lái)存儲(chǔ)這些事件實(shí)例。這只有在具有非常多的事件、但您預(yù)計(jì)大部分事件都不會(huì)實(shí)現(xiàn)時(shí)才有用。

  1. public delegate void EventHandler1(int i); 
  2. public delegate void EventHandler2(string s); 
  3. public class PropertyEventsSample 
  4.     private System.Collections.Generic.Dictionary<string, System.Delegate> eventTable; 
  5.     public PropertyEventsSample() 
  6.     { 
  7.         eventTable = new System.Collections.Generic.Dictionary<string, System.Delegate>(); 
  8.         eventTable.Add("Event1"null); 
  9.         eventTable.Add("Event2"null); 
  10.     } 
  11.     public event EventHandler1 Event1 
  12.     { 
  13.         add 
  14.         { 
  15.             eventTable["Event1"] = (EventHandler1)eventTable["Event1"] + value; 
  16.         } 
  17.         remove 
  18.         { 
  19.             eventTable["Event1"] = (EventHandler1)eventTable["Event1"] - value; 
  20.         } 
  21.     } 
  22.     public event EventHandler2 Event2 
  23.     { 
  24.         add 
  25.         { 
  26.             eventTable["Event2"] = (EventHandler2)eventTable["Event2"] + value; 
  27.         } 
  28.         remove 
  29.         { 
  30.             eventTable["Event2"] = (EventHandler2)eventTable["Event2"] - value; 
  31.         } 
  32.     } 
  33.     internal void RaiseEvent1(int i) 
  34.     { 
  35.         EventHandler1 handler1; 
  36.         if (null != (handler1 = (EventHandler1)eventTable["Event1"])) 
  37.         { 
  38.             handler1(i); 
  39.         } 
  40.     } 
  41.     internal void RaiseEvent2(string s) 
  42.     { 
  43.         EventHandler2 handler2; 
  44.         if (null != (handler2 = (EventHandler2)eventTable["Event2"])) 
  45.         { 
  46.             handler2(s); 
  47.         } 
  48.     } 
  49. public class TestClass 
  50.     public static void Delegate1Method(int i) 
  51.     { 
  52.         System.Console.WriteLine(i); 
  53.     } 
  54.     public static void Delegate2Method(string s) 
  55.     { 
  56.         System.Console.WriteLine(s); 
  57.     } 
  58.     static void Main() 
  59.     { 
  60.         PropertyEventsSample p = new PropertyEventsSample(); 
  61.  
  62.         p.Event1 += new EventHandler1(TestClass.Delegate1Method); 
  63.         p.Event1 += new EventHandler1(TestClass.Delegate1Method); 
  64.         p.Event1 -= new EventHandler1(TestClass.Delegate1Method); 
  65.         p.RaiseEvent1(2); 
  66.  
  67.         p.Event2 += new EventHandler2(TestClass.Delegate2Method); 
  68.         p.Event2 += new EventHandler2(TestClass.Delegate2Method); 
  69.         p.Event2 -= new EventHandler2(TestClass.Delegate2Method); 
  70.         p.RaiseEvent2("TestString"); 
  71.     } 
  72. }

事件的異步模式

有多種方式可向客戶端代碼公開(kāi)異步功能。基于事件的異步模式為類規(guī)定了用于顯示異步行為的建議方式。對(duì)于相對(duì)簡(jiǎn)單的多線程應(yīng)用程序,BackgroundWorker 組件提供了一個(gè)簡(jiǎn)單的解決方案。對(duì)于更復(fù)雜的異步應(yīng)用程序,請(qǐng)考慮實(shí)現(xiàn)一個(gè)符合基于事件的異步模式的類。

  • “在后臺(tái)”執(zhí)行耗時(shí)任務(wù)(例如下載和數(shù)據(jù)庫(kù)操作),但不會(huì)中斷您的應(yīng)用程序。
  • 同時(shí)執(zhí)行多個(gè)操作,每個(gè)操作完成時(shí)都會(huì)接到通知。
  • 等待資源變得可用,但不會(huì)停止(“掛起”)您的應(yīng)用程序。
  • 使用熟悉的事件和委托模型與掛起的異步操作通信。

原文鏈接:http://www.cnblogs.com/liusuqi/p/3145324.html

責(zé)任編輯:陳四芳 來(lái)源: M守護(hù)神
相關(guān)推薦

2010-01-12 18:12:58

VB.NET事件

2009-10-23 17:03:18

VB.NET事件編程

2011-05-20 14:22:11

.NET

2009-09-03 16:27:57

ASP.NET回車事件

2010-01-05 10:29:43

.NET Framew

2009-09-09 12:35:00

ASP.NET回車提交回車提交事件

2009-08-18 11:08:24

.Net Framew

2009-11-12 11:38:03

ADO.NET連接事件

2009-11-04 09:32:12

VB.NET Auto

2009-11-11 13:24:29

VB.NET事件

2009-11-13 14:29:13

ADO.NET Mer

2009-10-27 11:39:03

VB.NET事件處理程

2009-11-12 12:39:16

ADO.NET Sta

2010-01-22 17:22:49

VB.NET事件訪問(wèn)器

2009-11-03 11:06:40

VB.NET事件

2011-06-16 15:14:17

VB.NET事件委托

2010-01-11 10:08:47

VB.NET事件通道

2009-08-07 15:45:26

ASP.NET復(fù)合控件數(shù)據(jù)綁定

2010-01-14 17:33:47

VB.NET重載事件處

2010-01-08 18:26:34

VB.NET網(wǎng)頁(yè)控件事
點(diǎn)贊
收藏

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

中文字幕成人精品久久不卡| 国产精品久久久久久久久久免费看| 欧美区在线播放| 人妻体内射精一区二区三区| 在线观看欧美日韩电影| 国产精品久久久久aaaa| 国产精品永久入口久久久| www.色国产| 在线观看日韩| 亚洲偷欧美偷国内偷| 久久精品一二三四| 亚洲成人一区在线观看| 一区二区三区免费看视频| 欧美日韩综合另类| 性欧美8khd高清极品| 丝袜亚洲另类丝袜在线| 久久精品2019中文字幕| 91精品国产自产| 国产精品色婷婷在线观看| 欧美日韩视频在线| 99热这里只有精品免费| 国产一区二区影视| 成人国产电影网| 国产日韩精品综合网站| 欧美日韩综合一区二区三区| 国产精品vip| 日韩中文字幕在线免费观看| 亚洲精品视频大全| 成人动漫视频| 欧美一区二区成人| 亚洲精品视频导航| 亚洲最大网站| 午夜精品福利一区二区蜜股av| 亚洲精品在线免费| 男人天堂资源在线| 99在线视频精品| 91原创国产| 国产男女猛烈无遮挡| 日本不卡视频一二三区| 91超碰caoporn97人人| 激情综合五月网| 亚洲国产一成人久久精品| 中文字幕在线看视频国产欧美在线看完整| 日本丰满少妇裸体自慰| 精品女人视频| 亚洲风情亚aⅴ在线发布| 中文字幕亚洲日本| 久久综合给合| 欧美一区二区三区免费观看视频| 激情 小说 亚洲 图片: 伦| 新片速递亚洲合集欧美合集| 精品久久久久国产| 男女高潮又爽又黄又无遮挡| 国产在线美女| 都市激情亚洲色图| 男人天堂网视频| 中文不卡1区2区3区| 欧美日韩美女在线| 亚洲中文字幕无码不卡电影| 秋霞伦理一区| 黄色成人在线免费| 色综合av综合无码综合网站| 小早川怜子影音先锋在线观看| 精品动漫一区二区| 国产情侣av自拍| 99久久er| 欧美高清视频www夜色资源网| 伊人网在线综合| 国产精选久久| 欧美成人艳星乳罩| 无码一区二区精品| 九一成人免费视频| 中文字幕亚洲无线码a| 国精品人伦一区二区三区蜜桃| 久久国产成人午夜av影院宅| 深夜精品寂寞黄网站在线观看| 国精产品久拍自产在线网站| 91成人影院| 性色av香蕉一区二区| 手机看片久久久| 久久狠狠亚洲综合| 国产高清精品一区二区| 奇米影视888狠狠狠777不卡| 国产目拍亚洲精品99久久精品| 伊人久久大香线蕉av一区| 大片免费在线看视频| 亚洲成a人v欧美综合天堂| 日韩精品视频久久| 日韩成人在线电影| 日韩欧美在线一区二区三区| 在线观看国产免费视频| 欧美日韩xxxx| 毛片精品免费在线观看| 在线观看国产亚洲| 九一久久久久久| 国产一区二区三区黄| 国产爆初菊在线观看免费视频网站 | 无码国产精品96久久久久| 国产成人av自拍| 日本一区网站| 色婷婷视频在线观看| 欧美视频免费在线| 伊人免费视频二| 欧美美女在线| 欧美另类暴力丝袜| 波多野结衣黄色| 成人黄色av电影| 好吊色这里只有精品| 春暖花开亚洲一区二区三区| 日韩视频国产视频| 日本欧美一区二区三区不卡视频| 黑丝一区二区| 国产一区深夜福利| 免费在线视频一级不卡| 亚洲尤物在线视频观看| 五月激情婷婷在线| 国产精品免费99久久久| 久久久久国产视频| 99精品国产99久久久久久97| 久久精品人人做人人综合| www.成年人视频| 97精品资源在线观看| 国产亚洲精品91在线| 日本三级小视频| 国产成人av电影在线播放| 亚洲一区二区三区在线观看视频| 亚洲电影观看| 亚洲第一精品自拍| 中文字幕影音先锋| 激情国产一区二区| 亚洲看片网站| 播放一区二区| 一区二区亚洲精品国产| 中文字幕激情小说| 91香蕉国产在线观看软件| 18黄暴禁片在线观看| 免费观看亚洲天堂| 久色乳综合思思在线视频| 最近国语视频在线观看免费播放| 久久影院视频免费| 欧美色图色综合| 麻豆成人入口| 7777kkkk成人观看| 外国精品视频在线观看| 午夜精品久久久久久久久久久| 美女扒开腿免费视频| 影音先锋日韩资源| 国产精品日韩二区| 97蜜桃久久| 日韩成人在线播放| 午夜毛片在线观看| 国产亚洲欧美一级| 国产又黄又猛又粗又爽的视频| 沈樵精品国产成av片| 人妻夜夜添夜夜无码av| 色呦呦在线视频| 91精品国产欧美日韩| 色哟哟一一国产精品| 久久精品国产99久久6| 一本久久a久久精品vr综合| 国产精品久久久久77777丨| 亚洲人成人99网站| 亚洲中文字幕无码爆乳av| 国产午夜精品美女毛片视频| 毛葺葺老太做受视频| 精品美女久久| 91精品久久久久久久久| a天堂中文在线官网在线| 日韩欧美卡一卡二| 日本午夜精品理论片a级app发布| 成人动漫在线一区| 日本精品一区二区三区四区| 成人在线视频免费观看| 成人欧美一区二区三区在线| 亚洲91av| 国产婷婷97碰碰久久人人蜜臀 | 亚洲超碰精品一区二区| av鲁丝一区鲁丝二区鲁丝三区| 模特精品在线| 亚洲免费视频一区| 亚洲国产中文在线二区三区免| 隔壁老王国产在线精品| 欧洲一区av| 欧美日韩午夜在线视频| 久久久www成人免费毛片| 91欧美一区二区| 国产色视频在线播放| 伊人蜜桃色噜噜激情综合| 明星裸体视频一区二区| 亚洲欧洲二区| 欧美一区二区三区……| 浪潮av一区| 亚洲黄在线观看| 在线观看国产小视频| 五月婷婷另类国产| 可以免费看av的网址| 99久久伊人网影院| 小泽玛利亚视频在线观看| 极品日韩av| 正义之心1992免费观看全集完整版| 大桥未久女教师av一区二区| 国产精品狠色婷| 女子免费在线观看视频www| 亚洲天堂第一页| www.桃色av嫩草.com| 色国产精品一区在线观看| 九九视频免费在线观看| 亚洲国产电影在线观看| 在线观看国产网站| 国产黄色成人av| 亚洲爆乳无码专区| 精品1区2区3区4区| 一区二区三区四区久久| 久久不见久久见中文字幕免费| 99国产超薄肉色丝袜交足的后果 | 日韩欧美国产视频| 免费中文字幕在线观看| 国产精品免费网站在线观看| 欧美做受喷浆在线观看| 国产凹凸在线观看一区二区| 天堂一区在线观看| 久久综合中文| 欧美日韩二三区| 亚洲精品激情| 996这里只有精品| 91精品久久久久久久久久不卡| 日韩av不卡在线播放| 日韩影视在线观看| 好吊色欧美一区二区三区视频| 亚洲精品一区二区三区中文字幕| 国产中文字幕91| 成人黄色免费网站| 国产精品免费小视频| 成人网ww555视频免费看| 国产99视频精品免视看7| 色多多在线观看| 97国产在线观看| 黄色小说在线播放| 久久成人精品视频| h片在线播放| 欧美超级免费视 在线| 69成人在线| 欧美成人精品一区二区三区| 免费av毛片在线看| 久久精品夜夜夜夜夜久久| 免费在线观看av| 久久综合伊人77777| 国产视频一区二区| 久久这里有精品视频| 成人黄色在线电影| 欧美人在线视频| 色呦呦在线观看视频| 国内精品久久久久伊人av| a级片在线免费观看| 欧美在线影院在线视频| 亚洲女色av| 国产精品高清免费在线观看| 懂色aⅴ精品一区二区三区| 国产欧美日韩中文| 久久久91麻豆精品国产一区| 99re视频| 欧美巨大xxxx| 日本婷婷久久久久久久久一区二区| 国产精品一在线观看| 夜夜爽99久久国产综合精品女不卡 | 欧美特黄一区| 欧美高清中文字幕| 国产一区观看| 久久国产成人精品国产成人亚洲| 久久久成人网| 日本超碰在线观看| 国产成人av资源| 草草地址线路①屁屁影院成人| 日本一区二区视频在线观看| 999精品视频在线观看播放| 一区二区久久久久| 日韩欧美性视频| 在线看国产一区二区| 国产视频一区二区三| 亚洲黄色av网站| aaa日本高清在线播放免费观看| 北条麻妃一区二区三区中文字幕| 色a资源在线| 欧美专区中文字幕| 国产高清精品二区| 精品视频高清无人区区二区三区| 不卡一区综合视频| 久久男人资源站| 日韩福利电影在线| 极品人妻一区二区| 国产欧美一区二区三区网站| 欧美另类视频在线观看| 欧美视频在线观看 亚洲欧| 国产精品免费无遮挡| 亚洲高清色综合| 欧美激情免费| 热久久视久久精品18亚洲精品| 日本久久二区| 久久偷看各类wc女厕嘘嘘偷窃 | 久久视频免费在线| 久久aⅴ国产紧身牛仔裤| 波多野结衣免费观看| 久久影视一区二区| 强行糟蹋人妻hd中文| 欧美在线免费视屏| 色屁屁草草影院ccyycom| 色av中文字幕一区| 中文在线аv在线| 懂色av一区二区三区在线播放| 日韩dvd碟片| 亚洲中文字幕无码中文字| 国产电影一区在线| 激情高潮到大叫狂喷水| 疯狂做受xxxx高潮欧美日本| 性欧美videos另类hd| 久久久99久久精品女同性| 色综合一本到久久亚洲91| 九九99玖玖| 激情文学一区| 亚洲国产精品久久久久爰色欲| 欧美在线a视频| 久久天堂av综合合色蜜桃网| 日韩三级在线观看视频| 日韩欧美黄色动漫| 免费av网站在线播放| 久久天天躁日日躁| 国产福利91精品一区二区| 欧美动漫一区二区| 一本久道久久久| 亚洲麻豆一区二区三区| 樱花草国产18久久久久| 91麻豆国产视频| 综合136福利视频在线| 欧美精品高清| 日韩精品一线二线三线| 久久精品主播| 国产色视频一区二区三区qq号| 亚洲高清免费在线| 国产香蕉在线观看| 久久久久久久电影一区| 最新国产精品精品视频| 大西瓜av在线| 99久久免费精品高清特色大片| 久久久久久福利| 精品国产一区二区三区久久久蜜月 | 午夜久久99| 亚洲黄色片免费| 亚洲素人一区二区| 91成品人影院| 久久精品成人一区二区三区 | 欧美丝袜自拍制服另类| av一本在线| 成人激情视频在线观看| 久久久久国产精品| 手机在线观看日韩av| 亚洲一区二区精品视频| 欧美 日韩 国产 在线| 午夜伦理精品一区| 亚洲人和日本人hd| 成人黄色一区二区| 中国色在线观看另类| 一区二区精品视频在线观看| 久久九九免费视频| 97一区二区国产好的精华液| 日韩av在线播放不卡| 久久夜色精品一区| 中文字幕777| 久久夜色撩人精品| 9l视频自拍蝌蚪9l视频成人| 亚洲熟妇国产熟妇肥婆| 久久久蜜桃精品| 国产一区二区视频免费观看| 欧美乱妇高清无乱码| 国偷自产视频一区二区久| 欧美私人情侣网站| 亚洲欧美在线观看| 丰满肉肉bbwwbbww| 青青久久av北条麻妃海外网| 日韩成人免费| 国产人妻精品午夜福利免费| 欧美小视频在线观看| 午夜激情视频在线观看| 97夜夜澡人人双人人人喊| 亚洲一区亚洲| 精品人妻伦九区久久aaa片| 亚洲成人动漫在线播放| 777午夜精品电影免费看| 麻豆一区二区三区在线观看| 99精品热视频| 6—12呦国产精品| 97久久精品在线| 欧美独立站高清久久| 亚洲激情 欧美| 欧美美女bb生活片| 国产乱码午夜在线视频| 中文字幕日韩精品久久| 91亚洲精品久久久蜜桃网站 | 日韩电影免费在线观看中文字幕| 素人啪啪色综合| 僵尸世界大战2 在线播放|