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

C#自定義特性介紹

開發 后端
本文通過實例介紹了C#自定義特性。如果不能自己定義一個特性并使用它,我想你怎么也不能很好的理解特性。

C#自定義特性范例介紹

如果不能自己定義一個特性并使用它,我想你怎么也不能很好的理解特性,我們現在就自己構建一個特性。假設我們有這樣一個很常見的需求:我們在創建或者更新一個類文件時,需要說明這個類是什么時候、由誰創建的,在以后的更新中還要說明在什么時候由誰更新的,可以記錄也可以不記錄更新的內容,以往你會怎么做呢?是不是像這樣在類的上面給類添加注釋:

  1. //更新:Matthew, 2008-2-10, 修改 ToString()方法  
  2. //更新:Jimmy, 2008-1-18  
  3. //創建:張子陽, 2008-1-15  
  4. public class DemoClass{  
  5.     // Class Body  

這樣的的確確是可以記錄下來,但是如果有一天我們想將這些記錄保存到數據庫中作以備份呢?你是不是要一個一個地去查看源文件,找出這些注釋,再一條條插入數據庫中呢?

通過上面特性的定義,我們知道特性可以用于給類型添加元數據(描述數據的數據,包括數據是否被修改、何時創建、創建人,這些數據可以是一個類、方法、屬性),這些元數據可以用于描述類型。那么在此處,特性應該會派上用場。那么在本例中,元數據應該是:注釋類型(“更新”或者“創建”),修改人,日期,備注信息(可有可無)。而特性的目標類型是DemoClass類。

按照對于附加到DemoClass類上的元數據的理解,我們先創建一個封裝了元數據的類RecordAttribute:

  1. public class RecordAttribute {     
  2.     private string recordType;      // 記錄類型:更新/創建     
  3.     private string author;          // 作者     
  4.     private DateTime date;          // 更新/創建 日期     
  5.     private string memo;         // 備注     
  6.     
  7.     // 構造函數,構造函數的參數在特性中也稱為“位置參數”。     
  8.     public RecordAttribute(string recordType, string author, string date) {     
  9.        this.recordType = recordType;     
  10.        this.author = author;     
  11.        this.date = Convert.ToDateTime(date);     
  12.     }     
  13.     
  14.     // 對于位置參數,通常只提供get訪問器     
  15.     public string RecordType {   get { return recordType; }   }     
  16.     public string Author { get { return author; } }     
  17.     public DateTime Date { get { return date; } }     
  18.     
  19.     // 構建一個屬性,在特性中也叫“命名參數”     
  20.     public string Memo {     
  21.        get { return memo; }     
  22.        set { memo = value; }     
  23.     }     
  24. }    
  25.  

NOTE:注意構造函數的參數 date,必須為一個常量、Type類型、或者是常量數組,所以不能直接傳遞DateTime類型。

這個類不光看上去,實際上也和普通的類沒有任何區別,顯然不能它因為名字后面跟了個Attribute就搖身一變成了特性。那么怎樣才能讓它稱為特性并應用到一個類上面呢?進行下一步之前,我們看看.Net內置的特性Obsolete是如何定義的:

  1. namespace System {  
  2.     [Serializable]  
  3.     [AttributeUsage(6140, Inherited = false)]  
  4.     [ComVisible(true)]  
  5.     public sealed class ObsoleteAttribute : Attribute {  
  6.  
  7.        public ObsoleteAttribute();  
  8.        public ObsoleteAttribute(string message);  
  9.        public ObsoleteAttribute(string message, bool error);  
  10.  
  11.        public bool IsError { get; }  
  12.        public string Message { get; }  
  13.     }  
  14. }   

添加特性的格式(位置參數和命名參數)

首先,我們應該發現,它繼承自Attribute類,這說明我們的 RecordAttribute 也應該繼承自Attribute類。 (一個特性類與普通類的區別是:繼承了Attribute類)

其次,我們發現在這個特性的定義上,又用了三個特性去描述它。這三個特性分別是:Serializable、AttributeUsage 和 ComVisible。Serializable特性我們前面已經講述過,ComVisible簡單來說是“控制程序集中個別托管類型、成員或所有類型對 COM 的可訪問性”(微軟給的定義)。這里我們應該注意到:特性本身就是用來描述數據的元數據,而這三個特性又用來描述特性,所以它們可以認為是“元數據的元數據”(元元數據:meta-metadata)。

(從這里我們可以看出,特性類本身也可以用除自身以外的其它特性來描述,所以這個特性類的特性是元元數據。)

因為我們需要使用“元元數據”去描述我們定義的特性 RecordAttribute,所以現在我們需要首先了解一下“元元數據”。這里應該記得“元元數據”也是一個特性,大多數情況下,我們只需要掌握 AttributeUsage就可以了,所以現在就研究一下它。我們首先看上面AttributeUsage是如何加載到ObsoleteAttribute特性上面的。

    [AttributeUsage(6140, Inherited = false)]

然后我們看一下AttributeUsage的定義:

  1. namespace System {  
  2.     public sealed class AttributeUsageAttribute : Attribute {  
  3.        public AttributeUsageAttribute(AttributeTargets validOn);  
  4.  
  5.        public bool AllowMultiple { getset; }  
  6.        public bool Inherited { getset; }  
  7.        public AttributeTargets ValidOn { get; }  
  8.     }  
  9. }  
  10.  

可以看到,它有一個構造函數,這個構造函數含有一個AttributeTargets類型的位置參數(Positional Parameter) validOn,還有兩個命名參數(Named Parameter)。注意ValidOn屬性不是一個命名參數,因為它不包含set訪問器,(是位置參數)。

這里大家一定疑惑為什么會這樣劃分參數,這和特性的使用是相關的。假如AttributeUsageAttribute 是一個普通的類,我們一定是這樣使用的:

// 實例化一個 AttributeUsageAttribute 類

AttributeUsageAttribute usage=new AttributeUsageAttribute(AttributeTargets.Class);

usage.AllowMultiple = true;  // 設置AllowMutiple屬性

usage.Inherited = false;// 設置Inherited屬性

但是,特性只寫成一行代碼,然后緊靠其所應用的類型(目標類型),那么怎么辦呢?微軟的軟件工程師們就想到了這樣的辦法:不管是構造函數的參數 還是 屬性,統統寫到構造函數的圓括號中,對于構造函數的參數,必須按照構造函數參數的順序和類型;對于屬性,采用“屬性=值”這樣的格式,它們之間用逗號分隔。于是上面的代碼就減縮成了這樣:

[AttributeUsage(AttributeTargets.Class, AllowMutiple=true, Inherited=false)]

可以看出,AttributeTargets.Class是構造函數參數(位置參數),而AllowMutiple 和 Inherited實際上是屬性(命名參數)。命名參數是可選的。將來我們的RecordAttribute的使用方式于此相同。(為什么管他們叫參數,我猜想是因為它們的使用方式看上去更像是方法的參數吧。)

假設現在我們的RecordAttribute已經OK了,則它的使用應該是這樣的:

C#代碼

  1. [RecordAttribute("創建","張子陽","2008-1-15",Memo="這個類僅供演示")]     
  2. public class DemoClass{     
  3.     // ClassBody     
  4. }     

其中recordType, author 和 date 是位置參數,Memo是命名參數。

C#自定義特性:AttributeTargets 位標記

從AttributeUsage特性的名稱上就可以看出它用于描述特性的使用方式。具體來說,首先應該是其所標記的特性可以應用于哪些類型或者對象。從上面的代碼,我們看到AttributeUsage特性的構造函數接受一個 AttributeTargets 類型的參數,那么我們現在就來了解一下AttributeTargets。

AttributeTargets 是一個位標記,它定義了特性可以應用的類型和對象。

[Flags]

public enum AttributeTargets {

    Assembly = 1,         //可以對程序集應用屬性。

    Module = 2,              //可以對模塊應用屬性。

    Class = 4,            //可以對類應用屬性。

    Struct = 8,              //可以對結構應用屬性,即值類型。

    Enum = 16,            //可以對枚舉應用屬性。

    Constructor = 32,     //可以對構造函數應用屬性。

    Method = 64,          //可以對方法應用屬性。

    Property = 128,           //可以對屬性 (Property) 應用屬性 (Attribute)。

    Field = 256,          //可以對字段應用屬性。

    Event = 512,          //可以對事件應用屬性。

    Interface = 1024,            //可以對接口應用屬性。

    Parameter = 2048,            //可以對參數應用屬性。

    Delegate = 4096,             //可以對委托應用屬性。

    ReturnValue = 8192,             //可以對返回值應用屬性。

    GenericParameter = 16384,    //可以對泛型參數應用屬性。

    All = 32767,  //可以對任何應用程序元素應用屬性。

}

現在應該不難理解為什么上面我范例中用的是:

[AttributeUsage(AttributeTargets.Class, AllowMutiple=true, Inherited=false)]

而ObsoleteAttribute特性上加載的 AttributeUsage是這樣的:

[AttributeUsage(6140, Inherited = false)]

因為AttributeUsage是一個位標記,所以可以使用按位或“|”來進行組合。所以,當我們這樣寫時:

[AttributeUsage(AttributeTargets.Class|AttributeTargets.Interface)

意味著既可以將特性應用到類上,也可以應用到接口上。

NOTE:這里存在著兩個特例:觀察上面AttributeUsage的定義,說明特性還可以加載到程序集Assembly和模塊Module上,而這兩個屬于我們的編譯結果,在程序中并不存在這樣的類型,我們該如何加載呢?可以使用這樣的語法:[assembly:SomeAttribute(parameter list)],另外這條語句必須位于程序語句開始之前。

C#自定義特性:Inherited 和 AllowMutiple屬性

AllowMutiple 屬性用于設置該特性是不是可以重復地添加到一個類型上(默認為false),就好像這樣:

[RecordAttribute("更新","Jimmy","2008-1-20")]

[RecordAttribute("創建","張子陽","2008-1-15",Memo="這個類僅供演示")]

public class DemoClass{

// ClassBody

}

所以,我們必須顯示的將AllowMutiple設置為True。

Inherited 就更復雜一些了,假如有一個類繼承自我們的DemoClass,那么當我們將RecordAttribute添加到DemoClass上時,DemoClass的子類也會獲得該特性。而當特性應用于一個方法,如果繼承自該類的子類將這個方法覆蓋,那么Inherited則用于說明是否子類方法是否繼承這個特性。

在我們的例子中,將 Inherited 設為false。

C#自定義特性:實現 RecordAttribute

現在實現RecordAttribute應該是非常容易了,對于類的主體不需要做任何的修改,我們只需要讓它繼承自Attribute基類,同時使用AttributeUsage特性標記一下它就可以了(假定我們希望可以對類和方法應用此特性):

[AttributeUsage(AttributeTargets.Class|AttributeTargets.Method, AllowMultiple=true, Inherited=false)]

public class RecordAttribute:Attribute {

    // 略

}

C#自定義特性:使用 RecordAttribute

我們已經創建好了自己的自定義特性,現在是時候使用它了。

C#代碼

  1. [Record("更新""Matthew""2008-1-20", Memo = "修改 ToString()方法")]     
  2. [Record("更新""Jimmy""2008-1-18")]     
  3. [Record("創建""張子陽""2008-1-15")]     
  4. public class DemoClass {          
  5.     public override string ToString() {     
  6.        return "This is a demo class";     
  7.     }     
  8. }     
  9.     
  10. class Program {     
  11.     static void Main(string[] args) {     
  12.        DemoClass demo = new DemoClass();     
  13.        Console.WriteLine(demo.ToString());     
  14.     }     
  15. }    

這段程序簡單地在屏幕上輸出一個“This is a demo class”。我們的屬性也好像使用“//”來注釋一樣對程序沒有任何影響,實際上,我們添加的數據已經作為元數據添加到了程序集中。可以通過IL DASM看到:

可以通過IL DASM看到 

【編輯推薦】

  1. C#基礎知識一覽
  2. 學習C#自定義用戶控件
  3. C#自定義組件和用戶組件屬性的設置
  4. C#編程中的組件-事件-委托
  5. Visual C#自定義組件的設計:Pop3Com組件
責任編輯:book05 來源: cnblogs
相關推薦

2009-08-04 09:09:51

C#反射

2009-08-28 17:45:19

C#自定義數據

2009-08-04 12:56:51

C#自定義事件

2021-03-29 00:02:10

C#Attribute元素

2009-08-03 13:34:06

自定義C#控件

2009-08-03 13:39:46

C#自定義用戶控件

2009-09-03 15:46:57

C#自定義事件

2009-08-04 08:48:44

C#內置特性

2009-08-12 14:53:50

C#類型轉換函數

2009-08-04 12:40:34

c#自定義事件

2024-09-11 14:46:48

C#旋轉按鈕

2021-06-17 06:52:37

C#自定義異常

2009-08-05 17:03:37

C#自定義控件

2009-08-04 09:56:46

C#事件處理自定義事件

2009-08-05 18:01:20

C#自定義異常處理

2009-08-04 13:07:46

C#自定義快捷鍵

2009-08-17 17:24:02

C#自定義消息框

2009-08-04 13:31:35

C#自定義事件

2009-08-19 16:51:14

C# 4.0 dyna

2009-08-03 14:46:12

C#自定義控件
點贊
收藏

51CTO技術棧公眾號

99久久激情视频| 91在线观看免费观看 | 狠狠躁少妇一区二区三区| 成人福利视频在线看| 国产成人精品视频在线| 免费国产羞羞网站美图| 欧美影院天天5g天天爽| 欧美色窝79yyyycom| 2021国产视频| 日本福利在线观看| 国产专区欧美精品| 日本不卡高字幕在线2019| 2014亚洲天堂| 综合国产视频| 日韩欧美国产1| 手机在线看福利| 国产在线xxx| 国产精品电影院| 精品日本一区二区| 国产精品主播一区二区| 午夜在线播放视频欧美| 九色精品免费永久在线| 欧美大波大乳巨大乳| 亚洲天堂av资源在线观看| 欧美在线一区二区三区| 霍思燕三级露全乳照| 大尺度做爰床戏呻吟舒畅| 午夜偷拍福利视频| 精品国产乱码| 日韩av最新在线| 国产一级二级av| www.成人在线视频| 欧美性生交大片免费| 丰满的少妇愉情hd高清果冻传媒| 在线免费看av| 国产欧美1区2区3区| 精品免费一区二区三区蜜桃| www.黄色一片| 国产综合久久久久久鬼色| 国产成人啪精品视频免费网| 日韩美女一级片| 欧美性久久久| 色综合天天综合网国产成人网 | 亚洲一区二三区| 一级二级三级欧美| 97超碰国产一区二区三区| 久久久国产午夜精品| 久久精品综合一区| 日韩中文字幕综合| 成人免费看的视频| 国产精品日韩欧美一区二区| 波多野结衣日韩| 日韩精品一级中文字幕精品视频免费观看| 国内精品视频久久| 国产乡下妇女做爰毛片| 黄页网站一区| 欧美激情手机在线视频| 亚洲欧美一区二区精品久久久| 欧美一级特黄a| 99re久久| 69av一区二区三区| 黄色一级片免费播放| 国产欧美日韩电影| 日韩精品中午字幕| 国产艳妇疯狂做爰视频 | 国产黄大片在线观看| 亚洲mv在线观看| 亚洲熟妇国产熟妇肥婆| 亚洲黄色免费av| 日本精品视频一区二区三区| 天天爽人人爽夜夜爽| 欧美成人毛片| 欧美成人国产一区二区| 国产伦精品一区三区精东| 欧美三级电影在线| 国产亚洲欧洲高清一区| 美国精品一区二区| 欧美视频亚洲视频| 8x拔播拔播x8国产精品| 国产99免费视频| 久久激五月天综合精品| 69174成人网| 色婷婷激情五月| 国产日韩欧美激情| 8x8x华人在线| 黄色综合网址| 欧美精品色综合| xxxx视频在线观看| 亚洲永久精品唐人导航网址| 中文字幕亚洲天堂| 久热精品在线观看| 日日夜夜精品视频免费| 亚洲自拍欧美精品| 国产尤物99| 国产精品视频一区二区久久| 综合分类小说区另类春色亚洲小说欧美 | 亚洲性生活大片| 国产成人精品免费视频网站| 蜜桃传媒视频麻豆第一区免费观看 | 青草成人免费视频| 国产稀缺精品盗摄盗拍| 亚洲精品日本| 国产精品视频地址| 欧美一区二区三区激情| 国产欧美精品一区二区色综合朱莉| 国产又大又长又粗又黄| 亚洲黄色免费看| 欧美变态tickling挠脚心| 一区二区三区伦理片| 欧美网站在线| 国产乱肥老妇国产一区二| 亚洲国产精品成人久久蜜臀| 国产精品午夜免费| 成人在线观看你懂的| 亚洲精品aa| 亚洲人成人99网站| 久久精品国产亚洲av无码娇色| 秋霞电影网一区二区| 国新精品乱码一区二区三区18| 日韩黄色影院| 日韩欧美国产激情| 精品熟女一区二区三区| 亚洲国产精品久久久久蝴蝶传媒| 国产不卡一区二区在线播放| 黄色三级网站在线观看| 亚洲视频免费在线| 亚洲最大综合网| 香蕉视频一区| 性视频1819p久久| www日本视频| ...xxx性欧美| 日本黄大片一区二区三区| 亚洲精品无吗| 欧美伊久线香蕉线新在线| 亚洲精品成人区在线观看| 亚洲天堂福利av| 成人av毛片在线观看| 日韩伦理视频| 国产精品视频在线观看| 九色在线免费| 色综合网站在线| 亚洲观看黄色网| 一区二区三区导航| 激情视频一区二区| √8天堂资源地址中文在线| 日韩欧美一区二区三区在线| 欧美激情图片小说| 国产高清久久久| 超碰10000| 精品中文视频| 久久6精品影院| 亚洲国产精彩视频| 亚洲第一在线综合网站| 亚洲精品www| 日韩中文字幕有码| 日韩精品福利网| 亚洲国产精品久久久久婷婷老年| 欧美精品资源| 丝袜亚洲另类欧美重口| 国产精品福利电影| 亚洲视频 欧洲视频| 久久人人爽人人片| 国内在线观看一区二区三区| 国产99在线免费| 综合日韩av| 最近中文字幕mv在线一区二区三区四区| 青青艹在线观看| 国产精品免费久久| 老司机av网站| 一本久久知道综合久久| 欧美久久久久久久| 成人国产精品入口免费视频| 久久精品99无色码中文字幕| 国产xxxx孕妇| 午夜精品久久久久久久久久久| 中文字幕精品视频在线| 欧美专区在线| 国产又黄又爽免费视频| 第一区第二区在线| 国产成人短视频| 日本在线观看| 欧美成人激情免费网| 7799精品视频天天看| 国产精品亲子伦对白| 女同性αv亚洲女同志| 免费日韩精品中文字幕视频在线| 亚洲精品日韩精品| 涩爱av色老久久精品偷偷鲁 | 国内精品自线一区二区三区视频| 800av在线免费观看| 尤物tv在线精品| 亚洲最大av在线| 国产欧美一区二区三区精品酒店| 中文字幕无线精品亚洲乱码一区| 成 人 免费 黄 色| 日本道精品一区二区三区| 午夜精品一区二区三区视频| 91老师片黄在线观看| 中文字幕在线综合| 国产精品一二| 国产免费内射又粗又爽密桃视频| 伊人春色之综合网| 91九色极品视频| 欧美韩国亚洲| 欧美激情精品久久久久久免费印度 | 91精品国产全国免费观看| 久久国产一级片| 国产女主播视频一区二区| 亚洲成人精品在线播放| 日本美女一区二区三区| 久久艹国产精品| 性欧美欧美巨大69| 欧美一区视久久| 爱爱精品视频| 91美女片黄在线观看游戏| 韩国成人漫画| 91国内精品久久| 欧美黄色视屏| 久久精品久久精品亚洲人| 黄色片在线播放| 亚洲国产欧美一区| 亚洲第一天堂网| 91精品国产美女浴室洗澡无遮挡| 久久久久久久久久成人| 五月婷婷综合激情| 国模无码国产精品视频| 亚洲欧洲99久久| 国产又黄又猛又粗又爽的视频| 国产视频一区在线观看一区免费| 久久福利一区二区| 欧美在线亚洲综合一区| 中文字幕日韩精品久久| 精品久久久亚洲| 欧美在线播放一区| 外国成人在线视频| 国内外成人免费视频| 大奶一区二区三区| 99久久久精品免费观看国产| 国产精品高清一区二区| 国产精品专区第二| 久久爱.com| 国产一区私人高清影院| 全球最大av网站久久| 国产成人中文字幕| av在线日韩| 国产精品美女视频网站| 日本成人伦理电影| 国产精品激情av电影在线观看 | 八戒八戒神马在线电影| www国产精品视频| 麻豆传媒视频在线| 欧美精品免费在线| 国产伦精品一区二区三区视频网站| 日本一区二区在线看| 国产视频在线观看一区| 国产乱论精品| 欧美激情国产日韩| 激情五月综合网| 艳色歌舞团一区二区三区| 日韩精品网站| 久久最新免费视频| 亚洲视频高清| 国产l精品国产亚洲区久久| 久久精品卡一| 911福利视频| 国产 欧美在线| 日韩精品卡通动漫网站| 国产亚洲一区二区三区在线观看| 91在线无精精品白丝| 综合色中文字幕| 我家有个日本女人| 亚洲1区2区3区视频| 国产午夜精品久久久久| 欧美三区在线视频| 国产成人免费看一级大黄| 精品国产91亚洲一区二区三区婷婷| 亚州av在线播放| 国产一区二区欧美日韩| 欧美极品另类| 欧美国产亚洲视频| 日韩三级影视| 91久久久久久| 亚洲精品国产动漫| 在线播放豆国产99亚洲| 好看不卡的中文字幕| 国产日韩一区二区在线| 日韩精品1区2区3区| 国产高清av片| 91蜜桃传媒精品久久久一区二区| 美国精品一区二区| 亚洲成年人网站在线观看| 销魂美女一区二区| 欧美一区二区三区免费视频| 午夜影院在线视频| www.久久色.com| 自拍偷拍亚洲视频| 97人人模人人爽人人少妇| 久草成人在线| 国产又粗又长又爽视频| 久久蜜桃精品| 性高潮免费视频| 国产精品久久三区| 亚洲欧美偷拍一区| 日韩欧美精品在线视频| jzzjzzjzz亚洲成熟少妇| 久久免费视频这里只有精品| 中文字幕日韩亚洲| 日韩成人av网站| 国产欧美一级| 亚洲AV成人精品| 中文字幕一区二区三区在线不卡| 成人精品免费在线观看| 日韩精品一区国产麻豆| 在线观看麻豆| 国产成人精品优优av| 国产精品一线| 日韩中文字幕亚洲精品欧美| 日韩精品欧美成人高清一区二区| 在线观看国产网站| 国产精品久久久久久久久久10秀 | 最新日本在线观看| 国产精品日韩欧美综合| 亚洲人成伊人成综合图片| 久久国产精品网| 国产成人在线影院| 日本裸体美女视频| 欧美亚洲一区二区在线观看| 亚洲av成人精品一区二区三区在线播放| 欧美猛少妇色xxxxx| 在线不卡一区| 中文字幕一区综合| 另类综合日韩欧美亚洲| 亚洲欧美va天堂人熟伦 | 国产美女三级无套内谢| 国产亚洲精品综合一区91| 成人福利视频| 欧美日韩在线精品| 国产精品一二| 成人乱码一区二区三区av| 欧美日韩中文在线| 神马精品久久| 国产91久久婷婷一区二区| 猛男gaygay欧美视频| 北条麻妃在线视频观看| 91蜜桃网址入口| 中文字幕手机在线视频| 亚洲色图激情小说| 惠美惠精品网| 亚洲精品一区国产精品| 免费观看久久久4p| 日本裸体美女视频| 日韩一区二区电影在线| 欧美日韩色网| 久久久久久久久久久一区| 欧美综合国产| 91免费在线看片| 91精品在线观看入口| 在线中文字幕第一页| 国产麻豆一区二区三区在线观看| 亚洲理论在线| 无码熟妇人妻av| 欧美日韩第一区日日骚| а√资源新版在线天堂| 国产成人av一区二区三区| 99热这里只有精品8| 国产精品扒开腿做爽爽| 欧美视频一区在线观看| 高清免费电影在线观看| 国产精品久久久久久久久婷婷| 免播放器亚洲| 国产小视频你懂的| 日韩精品一区二区三区视频在线观看| 成人超碰在线| 色一情一乱一伦一区二区三区 | 日本黄色一区二区| 日本中文字幕在线视频| 国产成人免费电影| 男人天堂欧美日韩| 欧美成人777| 精品视频—区二区三区免费| 91欧美精品| www.日本在线视频| 久久久一区二区三区| 国产一区二区网站| 97国产精品免费视频| 精品免费视频| www.美色吧.com| 欧美在线免费播放| 91麻豆免费在线视频| 久久精品国产一区二区三区日韩| 蜜桃传媒麻豆第一区在线观看| 国产va在线播放| 国产在线精品一区在线观看麻豆| 日韩在线观看a| www国产成人| 国产成人免费看一级大黄| 日本中文字幕不卡免费| 欧美成人日韩| 四虎影视1304t| 亚洲码在线观看|