整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          Delphi基礎教程圖文版之泛型容器

          Delphi基礎教程圖文版之泛型容器

          方描述

          Unit that implements generic container classes to group data items in arrays, dictionaries, lists, stacks, queues, and more.

          譯文:實現泛型容器類的單元,以在數組中對數據項進行分組,詞典,列表,堆棧,隊列等。

          起初在接觸到Delphi的時候我以為沒有這一部分內容,所有的都要自己實現,此處請原諒我的無知。。。。

          關于從那個版本開始支持泛型的,我在官方文檔上沒有找到對應的說明,也可能是我英語太菜,在官網迷路了。

          根據百度得來的結果2007的版本沒有(真百度的)支持2009的版本(萬一老師的博客上引用的也是這個版本)開始出現,也就是最早支持泛型容器的版本應該是Delphi2009

          聊泛型容器避不開的就是泛型的概念,之前看嗶哩嗶哩的網友留言從泛型一節就是開始懵逼了。其實大可不必,泛型可以理解為一個變量,它的值是一個具體的類型

          嗯,其實也可以把它當作孫大圣,它可以變成任何東西

          Collections單元

          在這個單元內一共定義了13個容器類,我們在其中甚至可以看到線程隊列。那么問題來了,我們需要精通或者學習所有的類嗎?答案是否定的

          容器類就我個人的理解其實一共有兩大表現形式,一種是列表形式的像數組,而另一種形式則以 Key,Value 成對的形式。也就是說我們從中選擇兩個比較有代表性的類進行學習即可。下面是我選擇的兩個類

          • System.Generics.Collections.TList:很明顯這個是列表
          • System.Generics.Collections.TDictionary:Dictionary這個單詞翻譯成中文是字典的意思,不知道為啥這么起名,它是K,V形式的代表

          注意:在單元內我們還可以看到相似的類例如 System.Generics.Collections.TObjectList<T> 和 System.Generics.Collections.TList<T>區別在于帶有Object的類會在刪除元素時釋放對象,而沒有帶Object的不會釋放

          API代碼

          針對容器類學習的總原則是圍繞增、刪、改、查這幾個核心的API功能即可,其他的就只能現用現查了,不知道別人寫代碼是什么習慣,我寫代碼的時候幫助文檔基本上都是開著的。。。

          下面是針對兩個容器類的代碼實現

          TList

          實體類(TStudent)代碼

          type
          
              TStudent=class
              private
                  FName: string;
              public
                  property Name: string read FName write FName;
                  // 構造方法
                  constructor Create; overload;
                  // 有參構造方法
                  constructor Create(FName: string); overload;
              end;
          
          constructor TStudent.Create;
          begin
          
          end;
          
          constructor TStudent.Create(FName: string);
          begin
              Self.FName :=FName;
          end;
          
          

          操作類(即增、刪、改、查),我沒有使用內聯,幾次想用都刪了

          uses
              System.Generics.Collections, System.SysUtils;
          
          var
              // 文檔上的定義是TList<T>,而我們的定義尖括號中的是TStudent,這就是泛型的用法
              StudentList: TList<TStudent>;
              // 循環中使用獲取TList成員
              Stu: TStudent;
          
          begin
              // 初始化學生列表
              StudentList :=TList<TStudent>.Create;
              StudentList.add(TStudent.Create('小強'));
              StudentList.add(TStudent.Create('蕭薔'));
              StudentList.add(TStudent.Create('小黑'));
              StudentList.add(TStudent.Create('小白'));
              StudentList.add(TStudent.Create('小黃'));
          
              // 開始之前輸出一次
              for Stu in StudentList do begin
          
                  Writeln('學生信息是:' + Stu.Name);
              end;
          
              // 泛型容器自帶的刪除函數,偷個懶
              StudentList.Delete(0);
          
              // 修改,查詢到指定的學生,修改其值即可
              StudentList.Items[0].Name :='小白';
          
          
              // 查詢,其實和數組的操作沒有太大區別
              for Stu in StudentList do begin
          
                  Writeln('學生信息是:' + Stu.Name);
              end;
          
          end.
          

          TDictionary

          此類容器的特點是 key 唯一,并且幾乎所有的操作都是根據 key 來的

          改造下實體類(TStudent)增加一個屬性,代碼如下

          type
          
              TStudent=class
              private
                  FName: string;
                  FId: string;
              public
                  property Name: string read FName write FName;
                  property Id: string read FId write FId;
          
                  // 構造方法
                  constructor Create; overload;
                  // 有參構造方法
                  constructor Create(FName: string; FId: string); overload;
              end;
          
          constructor TStudent.Create;
          begin
          
          end;
          
          constructor TStudent.Create(FName: string; FId: string);
          begin
              Self.FName :=FName;
          end;
          

          操作類(即增、刪、改、查)

          
          {注意單元的引用}
          uses
              System.Generics.Collections, System.SysUtils;
          
          var
              // 文檔上的定義是TList<T>,而我們的定義尖括號中的是TStudent,這就是泛型的用法
              StudentMap: TDictionary<string, TStudent>;
              // 循環中使用獲取TList成員
              Key: string;
              Student,Stu: TStudent;
          
          begin
              // 初始化學生列表
              StudentMap :=TDictionary<string, TStudent>.Create;
              // 此處的添加其實并不是太好,根據文檔描述,當我們添加的元素的key已經存在會拋出異常
              // 建議使用AddOrSetValue
              StudentMap.add('1001', TStudent.Create('1002', '小強'));
              StudentMap.add('1002', TStudent.Create('1001', '蕭薔'));
              StudentMap.add('1003', TStudent.Create('1003', '小黑'));
              StudentMap.add('1004', TStudent.Create('1004', '小白'));
              StudentMap.add('1005', TStudent.Create('1004', '小黃'));
          
              // 注意此處獲取是key,也就是1001 1002這些東西
              for Key in StudentMap.Keys do begin
          
                  // 獲取到key之后,再根據key獲取對應value也就是學生對象
                  // 這里的獲取方式有點兒任性居然要的是一個指針,而不是直接返回
                  StudentMap.TryGetValue(Key, Student);
                  // 最好判斷一下,否則容易出現空指針
                  if (Student <> nil) then
                      Writeln('學生信息是:' + Student.Name)
              end;
          
              // 刪除元素,無論什么操作都是通過key去操作,因為key是不可以重復的
              StudentMap.Remove('1005');
          
              // 修改,沒有就添加,有就更新
              StudentMap.AddOrSetValue('1004', TStudent.Create('1004', '小黃'));
          
              // 直接獲取value
              for Stu in StudentMap.values do begin
                  // 最好判斷一下,否則容易出現空指針
                  if (Stu <> nil) then
                      Writeln('學生信息是:' + Student.Name)
          
              end;
          end.
          

          參考資料

          萬一的博客:https://www.cnblogs.com/del/category/113556.html

          官方文檔:http://docwiki.embarcadero.com/Libraries/Sydney/en/System.Generics.Collections

          ttp://www.gotapi.com/

          語言:英語

          簡介:HTML,CSS,XPATH,XSL,JAVASCRIPT等API的查詢網站。

          http://www.w3schools.com/

          語言:英語

          簡介:W3C制定的標準諸如XML,HTML,XSL等等的在線學習教程。

          http://www.xml.org.cn/

          語言:中文

          簡介:可以說是XML的中國官方網吧。W3C標準的翻譯組織與XML系列技術交流社區.

          http://www.connectionstrings.com/

          語言:英語

          簡介:這里幾乎收集了所有的數據庫連接字符(connectionstring)了。

          http://www.itpub.net/

          語言:中文

          簡介:我個人認為是國內最專業的綜合性行業性技術類社區.

          http://www.netvtm.com/

          語言:中文

          簡介:內容多翻譯于w3schools.com,少有原創。不過還是應該鼓勵精品翻譯。

          http://www.regexlib.com

          語言:英語

          簡介:正則表達式庫。搜索正則表達式用。

          http://www.rexv.org/

          語言:英語

          簡介:用Ajax開發的在線正則表達式驗證器.

          http://www.koders.com/

          語言:英語

          簡介:代碼搜索引擎,可以搜索幾十種語言的代碼。

          http://www.123aspx.com/Rotor/

          語言:英語

          簡介:.Net Frameworks的源代碼。

          語言:中文

          簡介:孟憲會的資料站,雖資料大多比較簡單,卻解決了開發中的大部分問題?!

          http://www.dofactory.com/Patterns/Patterns.aspx

          語言:英語

          簡介:23種設計模式的實現參考。特點是UML+精練的示例代碼+簡潔的解說風格。

          http://www.open-open.com/

          語言:中文

          簡介:Java開源大全,如果你用.NET,照著它的名字前加N找找應該都有吧 ?!:)

          http://www.riacn.com/

          語言:中文

          簡介:我認為是國內少有的RIA專業技術站于交流社區.

          http://www.cnpaf.net/

          語言:中文

          簡介:中國協議分析網,很全面的協議資料網。

          http://www.pinvoke.net/

          語言:英語

          簡介:通過.net調用win32等非受控API的資料大全。

          http://bbs.51js.com/

          語言:中文

          簡介:無憂腳本,專業的腳本技術社區。

          http://www.c-sharpcorner.com/

          語言:英語

          簡介:C# Corner,學習c#的好地方.

          http://blog.csdn.net/group/experts/

          語言:中文

          簡介:CSDN專家群,匯集CSDN專家的電子報.

          http://www.codeproject.com/

          語言:英語

          簡介:有很多可學習的示例代碼,特點是豐富,深入淺出.

          http://www.gotdotnet.com/

          語言:英語

          簡介:微軟開發維護的關于.net framework交流社區.

          http://www.sourceforge.net/

          語言:英語

          簡介:全球最大的開源軟體站點

          http://www.asp.net/QuickStart/

          語言:英語

          簡介:Microsoft .NET Framework SDK QuickStart Tutorials

          http://www.matrix.org.cn/

          語言:中文

          簡介:與 Java 共舞,Java優秀的專業社區,文章質量很高.做.Net的朋友也可以從其借鑒很多知識.

          JAVA學習模板——學習流程

          http://www.7zcn.com/javastep/StudyJavaInfo.html

          SUN中國技術社區

          http://developers.sun.com.cn/

          綜合網站 -

          數動在線http://www.shudoo.com/(電腦報) -http://www.csdn.net/ -

          比特網IT知識庫http://know.chinabyte.com/index.php/%E9%A6%96%E9%A1%B5 -

          至頂網http://www.zdnet.com.cn/ -

          計世網http://www.ccw.com.cn/ -

          中國IT實驗室http://www.chinaitlab.com/ -

          天極網http://www.yesky.com/ -

          賽迪網http://www.ccidnet.com/ -

          全球流量查詢http://www.alexa.com/ -

          Java網站 -

          Java軟件社區http://www.javaeye.com/ -

          java世紀網http://www.java2000.net/ -

          JAVABUGShttp://bugs.sun.com/JAVA漏洞 -

          http://www.mldnjava.cn/java.htm -

          HEY JAVA技術社區http://www.heyjava.com/ -

          ACCP教程網http://www.accptech.com/index.html

          論壇網站 -

          美河論壇http://www.eimhe.com/bbs/ -

          魔http://bbs.mldn.cn/ -

          http://bbs.chinajavaworld.com/index.jspa

          技術網站 -

          apache的ANThttp://ant.apache.org/bindownload.cgi -

          IBM http://www.ibm.com/developerworks/-

          IDE-

          Eclipse官網http://www.eclipse.org/downloads-

          MyEclipse官網http://www.myeclipseide.com/

          軟件測試

          軟件測試網http://www.51testing.com/

          1 程序員論壇:http://www.gxcxy.com

          2 J2me社區 http://www.j2meforums.com/forum/

          3 csdn http://www.csdn.net/

          4 Vc知識庫 http://www.vckbase.com/

          5 codeproject http://www.codeproject.com/

          6 程序員聯合開發網 http://www.pudn.com/

          7 看雪學院 http://www.pediy.com

          8 藍色理想 http://www.blueidea.com/

          9 博客園 http://www.cnblogs.com/

          10 Nuix應用開發社區 http://chinaunix.net/

          11 javaeye http://www.javaeye.com

          12 It人網 http://www.iteer.net/

          13 中國人才熱線 http://www.cjol.com/

          14 天涯論壇 http://www.tianya.cn/

          15 風云的blog http://blog.codingnow.com/

          16 新浪科技頻道 http://tech.sina.com.cn/

          17 phpchina http://www.phpchina.com/html/index.html

          18 游戲開發資源網 http://www.gameres.com/

          19 網絡游戲第一門戶 http://www.17173.com/

          20 我愛研發網 http://www.52rd.com/

          21 Msdn中文網 http://www.microsoft.com/china/MSDN/DeveloperCenter/default.mspx

          22 大富翁編程網站 http://www.delphibbs.com/

          23 Delphi盒子 http://www.2ccc.com/

          24 C++buillder研究 http://www.ccrun.com/

          25 It論壇 http://bbs.itren.cn/

          26 Java開源大全 http://www.open-open.com/

          27 codegurn http://www.codeguru.com/

          28 編程愛好者 http://www.programfan.com/

          29 Java中文站 http://www.java-cn.com/

          30 reactos http://www.reactos.org/zh/index.htm

          31 開源力量 http://www.opensourceforce.org/

          32 電腦編程技巧與維護 http://www.comprg.com.cn/

          33 中國電子網 http://21ic.com/

          34 編程中國 http://www.bc-cn.net/

          35 嵌入式開發論壇 http://www.cevx.com/bbs/

          36 電腦愛好者 http://www.cfan.com.cn/

          37 sybase中國 http://www.sybase.com.cn/gvswse/site/china/index.jsp

          38 pbdr http://www.pbdr.com/

          39 apache http://www.apache.org

          40 rootkit http://www.rootkit.com/index.php

          41 驅動開發網 http://www.driverdevelop.com/first.html

          42 安全焦點 http://www.xfocus.net/

          43 cnbeta網友媒體與言論平臺 http://www.cnbeta.com/

          44 fyter的博客 http://www.fyter.cn/Default.aspx

          45 asp.net控件 http://www.devexpress.com/

          46 operamask http://www.operamasks.org/

          47 中國源碼網 http://www.yuanma.org/

          48 sawin軟件研發之窗 http://www.sawin.cn/

          49 電腦教育與WEB教育在線 http://210.40.7.188/

          50 中國dos聯盟 http://www.cn-dos.net/

          51 中國bios聯盟 http://www.biosren.com/index.php

          52 bioscentral http://bioscentral.com/

          53 eda專業論壇 http://www.edacn.net/bbs/

          54 諾基亞論壇 http://forum.nokia.com.cn/sch/index.html

          55 計算機科學論壇 http://www.ieee.org.cn/index.asp

          56 ibm developerworks 中國 http://www.ibm.com/developerworks/cn/

          57 w3 http://www.w3.org/

          58 網頁設計師 http://www.w3cn.org/

          59 中國萬維網聯盟 http://www.w3china.org/index.htm

          60 豆瓣 http://www.douban.com/

          61 程序員門戶站:http://www.gxcxy.com

          62 軟件商務網 http://www.bizsofts.com/

          63 sun http://www.sun.com/

          64 google code http://code.google.com/

          65 google 開發人員主頁 http://code.google.com/intl/zh-CN/

          66 the official microsoft asp.net http://www.asp.net/

          67 microsoft IIS http://www.iis.net/default.aspx?tabid=1

          68 榮耀 http://www.royaloo.com/index.html

          69 侯捷網站 http://jjhou.csdn.net/

          70 java大本營 http://www.javadby.com/

          71 比特網 http://www.chinabyte.com/

          72 51cto http://www.51cto.com/

          73 infoq http://www.infoq.com/

          74 博客堂 http://blog.joycode.com/

          75 嵌入式開發網 http://www.embed.com.cn/

          76 嵌入式開線 http://www.mcuol.com/

          77 中嵌網 http://www.chinaeda.cn/

          78 酷勤網 http://www.kuqin.com/

          79 紅聯linux門戶 http://www.linuxdiyf.com/

          80 itpub技術門戶 http://www.itpub.net/

          81 程式設計俱樂部 http://www.programmer-club.com/index.asp

          82 uml軟件工程組織 http://www.uml.org.cn/index.asp

          83 delphi園地 http://www.delphifans.com/

          84 theserverside http://www.theserverside.com/

          85 中國donet俱樂部 http://www.chinaaspx.com/

          86 編程王 http://www.kingofcoders.com/

          87 it168 http://www.it168.com/

          88 open source software in c# http://csharp-source.net/

          89 中國IT實驗室 http://www.chinaitlab.com/

          90 落伍者站長論壇 http://www.im286.com/

          91 中國站長站 http://www.chinaz.com/

          92 asp.net源碼下載專業站 http://www.51aspx.com/

          93 it職業工程師 http://www.51myit.com/

          94 太平洋電腦網 http://www.pconline.com.cn/

          95 乘風原創程序 http://study.qqcf.com/

          96 網易學院 http://tech.163.com/school/

          97 程序設計/程序開發類教程 http://www.pcvz.com/Program/Programs/Index.html

          98 算法源碼吧 http://www.sfcode.cn/

          99 codegurn http://www.codeguru.cn/

          100 得益網 http://www.netyi.net/

          101 中國eclipse社區 http://www.eclipseworld.org/bbs/

          102 項目管理者聯盟 http://www.mypm.net/

          103 棲息谷 http://www.21manager.com/

          104 J2me開發網 http://www.j2medev.com/bbs/index.asp

          105 卓越亞馬遜 http://www.amazon.cn/

          WEB技術:

          WEB前端開發 http://www.css88.com/

          Ext JS官方網 http://www.extjs.com/

          Ext JS中文資料 http://www.extjs.org.cn/

          義:不同的地理信息系統或地理信息系統與其他信息系統之間實施數據雙向交換時采用的數據格式

          引自百度百科

          據百度百科上的描述數據交換這個詞最早是在《地理信息系統名詞》第二版,很明顯不是用來做編程的。在編程方面數據交換格式僅僅是一種格式,當前主流使用的格式有 3 種 : XML、JSON、YAML

          既然是一種格式,那么它就需要標準,因為通過標準可以限定各個格式中的具體內容

          XML

          XML(全稱EXtensible Markup Language),在我看來它是一種古老的數據交換格式,因為從我接觸到編程開始它就已經存在了

          標準所在網址:https://www.w3.org/TR/1998/REC-xml-19980210

          最新文檔地址:https://www.w3.org/TR/REC-xml/

          其實XML的標準一直是1.0,至少我沒有見過其他的,一般情況下我們在編寫XML文檔的時候都需要遵循一個約束文件,這個約束文件中規定了你可以編寫的內容。約束文件存在的方式也有兩種,原來是 DTD 格式現在主流的是 Schema

          XML 如果想完整的學習還是比較費勁的,不過一般情況下要求約束文檔能看懂,XML內容會編寫即可

          參考網址:https://www.w3school.com.cn/x.asp

          Delphi解析可使用 TXMLDocument(Delphi自帶),此外也可以使用微軟的 MSXML2 我沒有這種需求所以并沒有深入研究

          官方文檔:http://docwiki.embarcadero.com/Libraries/Sydney/en/Xml

          JSON

          JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。相比于XML格式JSON更為簡單明了

          標準文檔地址:http://www.json.org/json-zh.html

          具體的語法規則可以參考上面網址的文檔內容,中文的

          Delphi官方(當前最新版本DelphiXE10.4.2)已經支持對于JSON的解析了,官方文檔地址

          http://docwiki.embarcadero.com/Libraries/Sydney/en/System.JSON

          需要注意的是有些類是Tokyo 10.2新增的,在使用的時候需要檢查一下自己的版本

          YAML

          YAML (全稱YAML Ain’t Markup Language),YAML不是標記語言的意思,YAML是便于人閱讀基于unicode 編碼的各種語言的序列號標準。

          YAML語言的設計參考了JSON,XML和SDL等語言。YAML 強調以數據為中心,簡潔易讀,編寫簡單

          官網地址:http://yaml.org

          一個讓人頭皮發麻的站點

          學習的話可以參考 阮一峰 老師的博客內容,地址:https://www.ruanyifeng.com/blog/2016/07/yaml.html

          沒有找到官方支持,不過在GitHub上有一個開源庫是支持Delphi解析YAML格式數據的,有興趣的朋友可以去研究

          地址:https://github.com/neslib/Neslib.Yaml

          最后我想說我非常討厭這種數據格式,和python一樣依靠縮進和空格控制語法。。。

          JSON解析案例

          將原來視頻中講解的代碼在DelphiXE10.4.2上進行了重構

          uses
              System.JSON, System.Generics.Collections, System.JSON.Serializers,
              System.SysUtils;
          
          type
              { 實體類,主要是用于JSON字符串和類對象的互相轉換 }
              TStudent=class(TObject)
              private
                  FName: string;
                  FAge: Integer;
              public
                  property Name: string read FName write FName;
                  property Age: Integer read FAge write FAge;
                  constructor Create; overload;
                  constructor Create(FName: string; FAge: Integer); overload;
          
              end;
          
          constructor TStudent.Create;
          begin
          
          end;
          
          constructor TStudent.Create(FName: string; FAge: Integer);
          begin
              Self.FName :=FName;
              Self.FAge :=FAge;
          end;
          
          begin
              { 定義一個JSON字符串 }
              var
              UserJson :='{"FName":"小黑","FAge":18}';
              { 創建序列化對象 }
              var
              Serializer :=TJsonSerializer.Create();
          
              { 反序列化,其實就將字符串轉為對象 }
              var
              Student :=Serializer.Deserialize<TStudent>(UserJson);
              Writeln('反序列化:' + Student.Name + ',' + Student.Age.ToString);
          
              { 列表轉換,將TLIst容器轉為字符串,也可以說是數組轉換 }
          
              var
              List :=TList<TStudent>.Create;
              List.Add(TStudent.Create('小白', 30));
              List.Add(TStudent.Create('蕭薔', 30));
              // 創建序列化對象
              Serializer :=TJsonSerializer.Create();
          
              Writeln('序列化:' + Serializer.Serialize < TList < TStudent >> (List));
          
              var
                  { 一個比較復雜的json字符串 }
              Users :='{"FListHelper":{"FCount":2},"FItems":[{"FName":"小白","FAge":30},{"FName":"蕭薔","FAge":30}],"FComparer":{}}';
              // 創建序列化對象
              Serializer :=TJsonSerializer.Create();
              { 可以嘗試下這里會不會有問題,當字段匹配時居然可以直接轉換 }
              var
              UserList :=Serializer.Deserialize < TList < TStudent >> (Users);
          
              for var Stu in UserList do begin
                  Writeln('反序列化:' + Stu.Name + ',' + Stu.Age.ToString);
              end;
          
              { 獲取指定字段 }
              Writeln(TJSONObject.ParseJSONValue(Users).GetValue<TJSONObject>
                ('FListHelper').GetValue<string>('FCount'));
          
              Writeln(TJSONObject.ParseJSONValue(Users).GetValue<TJSONArray>('FItems')
                .Count.ToString);
          
              Readln;
          
          end.
          

          其實Delphi自帶的JSON解析已經夠用了,如果不能滿足你的話有一個開源庫你可以嘗試,不過我看它最近一次更新代碼是 3 年前....

          Github地址:https://github.com/hgourvest/superobject

          學習資料(萬一老師的博客):https://www.cnblogs.com/del/category/215158.html


          主站蜘蛛池模板: 日本一区二区三区精品中文字幕| 无码国产精品一区二区高潮| 成人免费一区二区无码视频| 亚洲熟妇av一区二区三区漫画| 日韩色视频一区二区三区亚洲| 久久久av波多野一区二区| 香蕉视频一区二区| 色综合视频一区二区三区| 国产主播一区二区三区在线观看| 亚洲AV日韩综合一区尤物| 五月婷婷一区二区| 亚洲制服丝袜一区二区三区| 无码毛片视频一区二区本码 | 中文字幕一区日韩精品| 亚洲一区二区成人| 一区二区视频在线播放| 久久精品国产亚洲一区二区| 国产在线不卡一区二区三区| 国产午夜精品一区理论片飘花| 一区二区三区AV高清免费波多| 国产福利一区二区精品秒拍| 波多野结衣中文字幕一区| 日韩AV无码一区二区三区不卡| 在线视频一区二区日韩国产| 亚洲乱码国产一区三区| 一区二区在线免费视频| 最新中文字幕一区| 日本精品一区二区三区在线视频一 | 午夜福利一区二区三区在线观看 | 一区二区三区在线观看免费| 最美女人体内射精一区二区| 日韩精品成人一区二区三区| 精品国产AⅤ一区二区三区4区| 国产主播一区二区| 熟妇人妻一区二区三区四区| 精品少妇人妻AV一区二区三区| 国产精品一区二区久久精品无码| 高清国产精品人妻一区二区| 亚洲日韩国产一区二区三区在线| 一区 二区 三区 中文字幕| 人妻久久久一区二区三区|