青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 224  文章 - 41  trackbacks - 0
<2011年5月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

享受編程

常用鏈接

留言簿(11)

隨筆分類(159)

隨筆檔案(224)

文章分類(2)

文章檔案(4)

經(jīng)典c++博客

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

原文地址:http://blog.csdn.net/wuchen_net/archive/2010/03/23/5409327.aspx
1. ReferenceEquals, == , Equals
Equals , == , ReferenceEquals都可以用于判斷兩個(gè)對象的個(gè)體是不是相等。

a) ReferenceEquals
ReferenceEquals是Object的靜態(tài)方法,用于比較兩個(gè)引用類型的對象是否是對于同一個(gè)對象的引用。對于值類型它總是返回false。(因?yàn)锽ox以后的對象總是不同的,hehe)

b) ==是一個(gè)可以重載的二元操作符,可以用于比較兩個(gè)對象是否相等。
對于內(nèi)置值類型,==判斷的是兩個(gè)對象的代數(shù)值是否相等。它會根據(jù)需要自動進(jìn)行必要的類型轉(zhuǎn)換,并根據(jù)兩個(gè)對象的值是否相等返回true或者false。例如:

Int a = 100;
Double b =100;

If(a == b)
Console.WriteLine(“equal supports compare between different types!”);

上面這段程序?qū)敵觯?
equal supports compare between different types!

而對于用戶定義的值類型,如果沒有重載==操作符,==將是不能夠使用的。例如:


Struct Userstruct1;
Userstruct1 a;
Userstruct1 b;

If(a == b)
Console.WriteLine(“can == reach this far?”)

上面的這段代碼是不能夠通過編譯的。可以通過重載使==作用于用戶定義的值類型。

對于引用類型,== 默認(rèn)的行為與ReferenceEquals的行為相同,僅有兩個(gè)對象指向同一個(gè)Reference的時(shí)候才返回true。但是.NET Framework中的類很多對==進(jìn)行了重載,例如String類的==與Equals的行為相同,判斷兩個(gè)字符串的內(nèi)容是否相等。所以在應(yīng)用中,對于 系統(tǒng)定義的引用類型建議不要使用==操作符,以免程序出現(xiàn)與預(yù)期不同的運(yùn)行結(jié)果。

c) Equals 作為Object內(nèi)置方法,Equals支持對于任意兩個(gè)CTSCommon Type System對象的比較。
Equals它有靜態(tài)方法和可重載的一個(gè)版本,下面的程序片斷解釋了這兩個(gè)方法的用法,

int a = 5;
int b = 5;

If(Object.Equals(a ,b))
// you can also use if(a.Equals(b))
{
Console.WriteLine(“a is equal to b”);
}

事實(shí)上,這兩個(gè)版本的結(jié)果完全相同,如果用戶重載了Equals,調(diào)用的都是用戶重載后的Equals。Equals的靜態(tài)方法的好處是可以不必考慮用于比較的對象是否為null。

Equals方法對于值類型和引用類型的定義不同,對于值類型,類型相同,并且數(shù)值相同(對于struct的每個(gè)成員都必須相同),則Equals返回 true,否則返回false。而對于引用類型,默認(rèn)的行為與ReferenceEquals的行為相同,僅有兩個(gè)對象指向同一個(gè)Reference的時(shí) 候才返回true。可以根據(jù)需要對Equals進(jìn)行重載,例如String類的Equals用于判斷兩個(gè)字符串的內(nèi)容是否相等。


//StringBuilder 類
//表示可變字符字符串。無法繼承此類。


StringBuilder a = new StringBuilder();
a.Append("the test a");
String s1 = a.ToString();
String s2 = "the test a";

if (s2 == s1)
Console.WriteLine("== returns true");

if (Object.Equals(s2, s1))
{
Console.WriteLine("equals returns true");
}

if (Object.ReferenceEquals(s2, s1))
{
Console.WriteLine("ReferenceEquals returns true");
}

這個(gè)實(shí)例將輸出:
== returns true
equals returns true

注:對于String類,直接聲明s1 = “the test a”的話,輸出結(jié)果將包含 "ReferenceEquals returns true",
因?yàn)槟J(rèn)的,String對于聲明的相同的字符串在堆上只保留一個(gè)Copy,所以s1與s2將會指向相同的Reference

http://javasky.bloghome.cn/posts/142567.html

在討論了運(yùn)算符,并簡要介紹了等于運(yùn)算符后,就應(yīng)考慮在處理類和結(jié)構(gòu)的實(shí)例時(shí)相等意味著什么。理解對象相等比較的機(jī)制對編寫邏輯表達(dá)式非常重要,另外,對實(shí)現(xiàn)運(yùn)算符重載和數(shù)據(jù)類型轉(zhuǎn)換也非常重要,本章的后面將討論運(yùn)算符重載。

    對象相等比較的機(jī)制對于引用類型(類的實(shí)例)的比較和值類型(基本數(shù)據(jù)類型,結(jié)構(gòu)或枚舉的實(shí)例)的比較來說是不同的。下面分別介紹引用類型和值類型的相等比較。

   5.3.1 引用類型的相等比較

    System.Object的一個(gè)初看上去令人驚訝的方面是它定義了3個(gè)不同的方法,來比較對象的相等性:ReferenceEquals()和Equals()的兩個(gè)版本。再加上比較運(yùn)算符==,實(shí)際上有4種進(jìn)行相等比較的方式。這些方法有一些微妙的區(qū)別,下面就介紹這些方法。

================================================================

下面的最明了

1. ReferenceEquals()方法

    ReferenceEquals()是一個(gè)靜態(tài)方法,測試兩個(gè)引用是否指向類的同一個(gè)實(shí)例,即兩個(gè)引用是否包含內(nèi)存中的相同地址。作為靜態(tài)方法,它不能重寫,所以只能使用System.Object的實(shí)現(xiàn)代碼。如果提供的兩個(gè)引用指向同一個(gè)對象實(shí)例,ReferenceEquals()總是返回true,否則就返回false。但是它認(rèn)為null等于null:

SomeClass x, y;

x = new SomeClass();

y = new SomeClass();

bool B1 = ReferenceEquals(null, null);                //return true

bool B2 = ReferenceEquals(null, x);                //return false

bool B3 = ReferenceEquals(x, y);                  //return false because x and y

                                            //point to different objects

2. 虛擬的Equals()方法

    Equals()虛擬版本的System.Object實(shí)現(xiàn)代碼也比較引用。但因?yàn)檫@個(gè)方法是虛擬的,所以可以在自己的類中重寫它,按值來比較對象。特別是如果希望類的實(shí)例用作字典中的鍵,就需要重寫這個(gè)方法,以比較值。否則,根據(jù)重寫Object.GetHashCode()的方式,包含對象的字典類要么不工作,要么工作的效率非常低。在重寫Equals()方法時(shí)要注意,重寫的代碼不會拋出異常。這是因?yàn)槿绻麙伋霎惓#值漕惥蜁鰡栴},一些在內(nèi)部調(diào)用這個(gè)方法的.NET基類也可能出問題。

3. 靜態(tài)的Equals()方法

    Equals()的靜態(tài)版本與其虛擬實(shí)例版本的作用相同,其區(qū)別是靜態(tài)版本帶有兩個(gè)參數(shù),并對它們進(jìn)行相等比較。這個(gè)方法可以處理兩個(gè)對象中有一個(gè)是null的情況,因此,如果一個(gè)對象可能是null,這個(gè)方法就可以拋出異常,提供了額外的保護(hù)。靜態(tài)重載版本首先要檢查它傳送的引用是否為null。如果它們都是null,就返回true(因?yàn)閚ull與null相等)。如果只有一個(gè)引用是null,就返回false。如果兩個(gè)引用都指向某個(gè)對象,它就調(diào)用Equals()的虛擬實(shí)例版本。這表示在重寫Equals()的實(shí)例版本時(shí),其效果相當(dāng)于也重寫了靜態(tài)版本。[Page]

4. 比較運(yùn)算符==

最好將比較運(yùn)算符看作是嚴(yán)格值比較和嚴(yán)格引用比較之間的中間選項(xiàng)。在大多數(shù)情況下,下面的代碼:

bool b = (x == y);          //x, y object references

   表示比較引用。但是,如果把一些類看作值,其含義就會比較直觀。在這些情況下,最好重寫比較運(yùn)算符,以執(zhí)行值的比較。后面將討論運(yùn)算符的重載,但顯然它的一個(gè)例子是System.String類,Microsoft重寫了這個(gè)運(yùn)算符,比較字符串的內(nèi)容,而不是它們的引用。

5.3.2 值類型的相等比較

在進(jìn)行值類型的相等比較時(shí),采用與引用類型相同的規(guī)則:ReferenceEquals()用于比較引用,Equals()用于比較值,比較運(yùn)算符可以看作是一個(gè)中間項(xiàng)。但最大的區(qū)別是值類型需要裝箱,才能把它們轉(zhuǎn)換為引用,才能對它們執(zhí)行方法。另外,Microsoft已經(jīng)在System.ValueType類中重載了實(shí)例方法Equals(),以便對值類型進(jìn)行合適的相等測試。如果調(diào)用sA.Equals(sB),其中sA和sB是某個(gè)結(jié)構(gòu)的實(shí)例,則根據(jù)sA和sB是否在其所有的字段中包含相同的值,而返回true或false。另一方面,在默認(rèn)情況下,不能對自己的結(jié)構(gòu)重載==運(yùn)算符。在表達(dá)式中使用(sA==sB)會導(dǎo)致一個(gè)編譯錯(cuò)誤,除非在代碼中為結(jié)構(gòu)提供了==的重載版本。

另外,ReferenceEquals()在應(yīng)用于值類型時(shí),總是返回false,因?yàn)闉榱苏{(diào)用這個(gè)方法,值類型需要裝箱到對象中。即使使用下面的代碼:

bool b = ReferenceEquals(v, v);          //v is a variable of some value type

也會返回false,因?yàn)樵谵D(zhuǎn)換每個(gè)參數(shù)時(shí),v都會被單獨(dú)裝箱,這意味著會得到不同的引用。調(diào)用ReferenceEquals()來比較值類型實(shí)際上沒有什么意義。

盡管System.ValueType提供的Equals()默認(rèn)重載肯定足以應(yīng)付絕大多數(shù)自定義的結(jié)構(gòu),但仍可以為自己的結(jié)構(gòu)重寫它,以提高性能。另外,如果值類型包含作為字段的引用類型,就需要重寫Equals(),以便為這些字段提供合適的語義,因?yàn)镋quals()的默認(rèn)重寫版本僅比較它們的地址。

http://www.zxbc.cn/html/20070809/25909.html

====================================================================================================================

http://msdn.microsoft.com/zh-cn/library/bsc2ak47(VS.80).aspx

Object.Equals 方法 (Object)
確定指定的 Object 是否等于當(dāng)前的 Object。

參數(shù)
obj
與當(dāng)前的 Object 進(jìn)行比較的 Object。

返回值
如果指定的 Object 等于當(dāng)前的 Object,則為 true;否則為 false。

 備注
Equals 的默認(rèn)實(shí)現(xiàn)僅支持引用相等,但派生類可重寫此方法以支持值相等。

對于引用類型,相等定義為對象相等;即這些引用是否引用同一對象。對于值類型,相等定義為按位相等。ValueType 類支持值類型。

給實(shí)現(xiàn)者的說明 此方法可由派生類重寫。例如,如果兩個(gè)對象表示相同的值,則許多基數(shù)據(jù)類型返回 true;否則返回 false。 此方法僅比較基元和對象。若要比較更復(fù)雜的結(jié)構(gòu)(如對象數(shù)組),必須重寫該方法。 下面的語句對于 Equals 方法的所有實(shí)現(xiàn)均必須為真。在列表中,x、y 和 z 表示不為 空引用(在 Visual Basic 中為 Nothing) 的對象引用。

除涉及浮點(diǎn)型的情況外,x.Equals(x) 都返回 true。請參見 IEC 60559:1989, Binary Floating-point Arithmetic for Microprocessor Systems。

x.Equals(y) 返回與 y.Equals(x) 相同的值。

如果 x 和 y 都為 NaN,則 x.Equals(y) 返回 true。

當(dāng)且僅當(dāng) x.Equals(z) 返回 true 時(shí),(x.Equals(y) && y.Equals(z)) 才返回 true。

只要不修改 x 和 y 引用的對象,對 x.Equals(y) 的相繼調(diào)用將返回相同的值。

x.Equals(空引用(在 Visual Basic 中為 Nothing)) 返回 false。

有關(guān)屬于 Equals 方法的其他必需行為,請參見 GetHashCode。 Equals 的實(shí)現(xiàn)必須不引發(fā)異常。 對于某些類型的對象,最好讓 Equals 測試值相等性而非引用相等性。如果兩個(gè)對象具有相同的“值”,那么即使它們不是同一實(shí)例,這樣的 Equals 實(shí)現(xiàn)仍返回 true。類型實(shí)施者決定對象的“值”的構(gòu)成,但這通常是存儲在對象的實(shí)例變量中的部分或全部數(shù)據(jù)。例如,String 的值基于字符串的字符;對于兩個(gè)按同樣的順序包含完全相同的字符的字符串實(shí)例,String 類的 Equals 方法返回 true。 實(shí)現(xiàn) IComparable 的類型必須重寫 Equals。 重寫 Equals 的類型也必須重寫 GetHashCode;否則,Hashtable 可能不正常工作。 如果編程語言支持運(yùn)算符重載,并且您選擇了重載給定類型的相等運(yùn)算符,則該類型必須重寫 Equals 方法。這樣的 Equals 方法實(shí)現(xiàn)必須返回與相等運(yùn)算符相同的結(jié)果。遵照此準(zhǔn)則有助于確保使用 Equals 的類庫代碼(如 ArrayList 和 Hashtable)的行為方式與應(yīng)用程序代碼使用的相等運(yùn)算符的方式一致。 下面是針對實(shí)現(xiàn)值類型的準(zhǔn)則:
考慮重寫 Equals,以便在 ValueType 上獲得比 Equals 的默認(rèn)實(shí)現(xiàn)所提供的性能增強(qiáng)的性能。

如果重寫 Equals 并且語言支持運(yùn)算符重載,則必須重載值類型的相等運(yùn)算符。

下面是針對實(shí)現(xiàn)引用類型的準(zhǔn)則:
如果引用類型的語義是基于該類型表示某個(gè)(些)值的事實(shí),則考慮對該類型重寫 Equals。

即使大多數(shù)引用類型重寫 Equals,它們也必須不能重載相等運(yùn)算符。但是,如果實(shí)現(xiàn)的引用類型想要具有值語義(如復(fù)雜的數(shù)字類型),則必須重寫相等運(yùn)算符。

using System;

public class Sample {
    void Method() {
    Object Obj1 = new Object();
    Object Obj2 = new Object();
    Console.WriteLine(Obj1.Equals(Obj2)); //===> false
    Obj2 = Obj1;
    Console.WriteLine(Obj1.Equals(Obj2)); //===> true
    }
}

===================================================

Object.Equals 方法 (Object, Object)

確定指定的 Object 實(shí)例是否被視為相等。

參數(shù)
objA
要比較的第一個(gè) Object。

objB
要比較的第二個(gè) Object。

返回值
如果 objA 是與 objB 相同的實(shí)例,或者如果兩者均為空引用,或者如果 objA.Equals(objB) 返回 true,則為 true;否則為 false。

 備注
Equals 的默認(rèn)實(shí)現(xiàn)僅支持引用相等,但派生類可重寫此方法以支持值相等。

對于引用類型,相等定義為對象相等;即這些引用是否引用同一對象。對于值類型,相等定義為按位相等。ValueType 類支持值類型。

在調(diào)用 objA.Equals(objB) 前,此方法首先檢查兩個(gè)參數(shù)是否均為空引用。

 示例
下面的代碼示例比較不同的對象。

C#

 

using System;

public class MyClass {
   
public static void Main() {
   
string s1 = "Tom";
   
string s2 = "Carol";
   Console.WriteLine(
"Object.Equals(\"{0}\", \"{1}\") => {2}"
      s1, s2, Object.Equals(s1, s2));

   s1 
= "Tom";
   s2 
= "Tom";
   Console.WriteLine(
"Object.Equals(\"{0}\", \"{1}\") => {2}"
      s1, s2, Object.Equals(s1, s2));

   s1 
= null;
   s2 
= "Tom";
   Console.WriteLine(
"Object.Equals(null, \"{1}\") => {2}",
       s1, s2, Object.Equals(s1, s2));

   s1 
= "Carol";
   s2 
= null;
   Console.WriteLine(
"Object.Equals(\"{0}\", null) => {2}"
       s1, s2, Object.Equals(s1, s2));

   s1 
= null;
   s2 
= null;
   Console.WriteLine(
"Object.Equals(null, null) => {2}"
       s1, s2, Object.Equals(s1, s2));
   }

}
/*

This code produces the following output.

Object.Equals("Tom", "Carol") => False
Object.Equals("Tom", "Tom") => True
Object.Equals(null, "Tom") => False
Object.Equals("Carol", null) => False
Object.Equals(null, null) => True

*/
  • Object.ReferenceEquals 方法



     



    確定指定的 Object 實(shí)例是否是相同的實(shí)例。


    參數(shù)


    objA

    要比較的第一個(gè) Object


    objB

    要比較的第二個(gè) Object





    返回值

  • 如果 objA 是與 objB 相同的實(shí)例,或者如果二者都為空引用,則為 true;否則為 false



    下面的代碼示例使用 ReferenceEquals 確定兩個(gè)對象是否是相同的實(shí)例。

  • using System;

    class MyClass {

       
    static void Main() {
          
    object o = null;
          
    object p = null;
          
    object q = new Object();

          Console.WriteLine(Object.ReferenceEquals(o, p));
          p 
    = q;
          Console.WriteLine(Object.ReferenceEquals(p, q));
          Console.WriteLine(Object.ReferenceEquals(o, p));
       }

    }


    /*

    This code produces the following output.

    True
    True
    False

    */
    posted on 2010-08-22 23:16 漂漂 閱讀(1918) 評論(0)  編輯 收藏 引用 所屬分類: c#開發(fā)
    青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美精品二区| 欧美一区二区三区免费视| 亚洲欧美www| 亚洲欧美清纯在线制服| 亚洲第一精品福利| 亚洲美女黄色| 国产婷婷色一区二区三区在线| 久久九九电影| 欧美日韩国产综合一区二区| 久久爱www| 欧美激情在线狂野欧美精品| 午夜精品一区二区三区在线| 久久国产主播精品| 亚洲中字黄色| 久久夜色精品国产| 亚洲一区二区高清| 可以免费看不卡的av网站| 亚洲一区二区在线免费观看| 老司机免费视频一区二区| 亚洲免费视频观看| 久久综合狠狠| 久久久久久亚洲精品不卡4k岛国| 欧美黄在线观看| 久久性天堂网| 国产精品白丝jk黑袜喷水| 欧美成ee人免费视频| 国产区日韩欧美| 日韩视频在线观看免费| 欧美亚洲综合另类| 香蕉久久夜色| 一区二区在线视频| 欧美日在线观看| 一区二区三区导航| 久久午夜激情| 一区二区av在线| 国产精品成人免费视频| 久久国产婷婷国产香蕉| 亚洲高清一区二| 久久综合色综合88| 欧美午夜精品久久久久久超碰| 免费在线欧美视频| 黄色国产精品| 欧美在线视频一区二区| 先锋影音国产精品| 国产精品视频大全| 亚洲视频在线观看视频| 99精品视频免费在线观看| 免费观看欧美在线视频的网站| 久久久久久国产精品一区| 国产精品自拍三区| 亚洲一区二区三区四区中文| 亚洲一区三区电影在线观看| 欧美日韩一区二区视频在线| 亚洲精品久久久久久久久久久久| 亚洲国产精品久久久久秋霞影院| 久久疯狂做爰流白浆xx| 久久精品一二三| 狠狠色丁香婷综合久久| 久久精品国产亚洲aⅴ| 久久天堂成人| 亚洲国产激情| 欧美电影免费观看| 最新国产拍偷乱拍精品| 日韩一级片网址| 国产精品v欧美精品v日本精品动漫| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲精品人人| 在线亚洲一区二区| 国产精品久久久一本精品| 亚洲国产日韩欧美在线动漫| 亚洲毛片在线看| 欧美日韩在线高清| 性欧美xxxx视频在线观看| 久久一区视频| 亚洲日本一区二区三区| 欧美午夜久久久| 亚洲综合好骚| 美女视频黄 久久| 亚洲免费av电影| 国产精品久久久免费| 久久久久欧美精品| 日韩亚洲精品在线| 亚洲欧美国产三级| 欧美日本一区| 国产综合自拍| 欧美一区二区免费| 猛男gaygay欧美视频| 亚洲国产精品成人综合| 亚洲私人影院在线观看| 国产偷久久久精品专区| 久久九九精品99国产精品| 亚洲女性裸体视频| 国产精品一区二区在线观看网站| 亚洲精品乱码久久久久久按摩观| 欧美一区二区三区视频在线观看| 中文网丁香综合网| 国产日韩在线亚洲字幕中文| 久久一二三四| 一本一本久久a久久精品牛牛影视| 香蕉久久国产| 亚洲二区在线观看| 在线一区二区三区四区| 欧美极品aⅴ影院| 亚洲第一精品福利| av不卡在线| 欧美日韩综合在线免费观看| 亚洲狠狠婷婷| 麻豆精品视频在线观看视频| 你懂的视频欧美| 国产精品www994| 欧美激情精品久久久久久黑人| 一区二区免费在线播放| 国产亚洲一区二区三区| 欧美日韩一区二区国产| 久久精品主播| 亚洲欧美色婷婷| 亚洲精品欧美极品| 麻豆九一精品爱看视频在线观看免费| 亚洲女女做受ⅹxx高潮| 日韩图片一区| 在线国产精品一区| 国产亚洲精品久久飘花 | 国产精品网站在线| 欧美激情综合色| 农村妇女精品| 久久久精品国产99久久精品芒果| 亚洲一区三区电影在线观看| 亚洲美女尤物影院| 亚洲人精品午夜| 亚洲国产精品电影| 欧美激情一二三区| 免费在线观看成人av| 久久久久久久久久看片| 欧美一级午夜免费电影| 亚洲一区欧美| 亚洲欧美www| 午夜精品视频在线观看一区二区| 中文国产一区| 日韩西西人体444www| 久久在线免费观看视频| 亚洲人成人99网站| 欧美一级大片在线免费观看| 亚洲精品国产视频| 亚洲影院一区| 亚洲在线日韩| 欧美黄色aa电影| 久久亚洲一区二区| 国产精品一区一区三区| 欧美成人资源| 亚洲精品视频二区| 欧美福利一区二区| 欧美福利电影网| 欧美精品激情blacked18| 欧美日韩国产一区| 欧美日韩视频在线一区二区 | 91久久精品一区二区别| 亚洲激情图片小说视频| 亚洲国产婷婷香蕉久久久久久99| 一区在线免费观看| 亚洲精品乱码久久久久| 亚洲精品在线一区二区| 国产精品99久久久久久白浆小说| 亚洲一区高清| 亚洲欧美日韩区| 久久日韩粉嫩一区二区三区| 免费在线国产精品| 亚洲精品无人区| 亚洲午夜小视频| 午夜欧美大片免费观看| 久久婷婷一区| 欧美日韩国产精品一卡| 国产欧美日韩激情| 在线播放日韩欧美| 一本综合精品| 久久久91精品国产一区二区精品| 欧美成人中文| 亚洲欧美日韩成人高清在线一区| 久久久久久久久综合| 欧美日韩91| 国产在线视频欧美| 日韩香蕉视频| 久久久国产亚洲精品| 亚洲电影毛片| 亚洲与欧洲av电影| 免费视频一区二区三区在线观看| 欧美视频日韩| 亚洲国产高清高潮精品美女| 亚洲视频免费在线观看| 麻豆成人综合网| 欧美成人免费在线视频| 国产欧美日韩一区| 亚洲毛片视频| 久久久999精品免费| 亚洲日本视频| 欧美制服第一页| 国产精品成人久久久久| 亚洲高清久久| 久热精品视频在线| 亚洲天堂免费观看| 欧美精品久久99久久在免费线|