文章編號: 935218 - 上次校閱: 2007年10月4日 - 版次: 2.8 MCTS Self-Paced 訓練套件 (測驗 70 536): Microsoft ?.NET Framework 2.0 — 應用程式開發基礎註解和更正第 2
在此頁中結論這份文件包含註解、 更正,與 Microsoft 按活頁簿的相關的已知錯誤的相關資訊 MCTS Self-Paced 訓練套件 (測驗 70 536): Microsoft ?.NET Framework 2.0 — 應用程式開發基礎,0-7356-2277年-9。這本書的額外修正可用於文章 923018
(http://support.microsoft.com/kb/923018/)
、 949730
(http://support.microsoft.com/kb/949730/)
,和 949734
(http://support.microsoft.com/kb/949734/)
。 將會涵蓋下列主題:
其他相關資訊頁面 200: 解答 B 問題 2 是不精確在頁面 200,回答 B 讀取:「 若要測試兩個物件是否相同的參考物件的" 應該閱讀: 「 若要測試是否兩個變數都參考相同物件 」 頁面 204: 程式碼範例的描述不正確在頁面 204,最後一句之前第一個程式碼範例會讀取:"一旦類別的執行個體您會使用 Push 方法來將項目加入至佇列,然後使用佇列方法將移除此清單中的項目,如這個簡短範例所示:" 應該閱讀: "一旦類別的執行個體您會使用 Push 方法來將項目加入至堆疊,然後 Pop 方法將移除在堆疊中的項目,如這個簡短範例所示:" 頁面 209: DictionaryEntry 稱為 DictionaryEntries在頁面 209,會讀取第四個項目符號點:列舉字典中並知道如何使用 DictionaryEntries。 應該閱讀: 列舉字典中並知道如何使用 DictionaryEntry。 頁面 210: 括弧使用方式不正確 VB 程式碼範例中在頁面 210,VB 程式碼範例在第二個段落之下會讀取:應該閱讀: 頁面 213: 不正確的方法,用於支援類別在頁面 213,在第四個句子 」 瞭解相等"下的第一個段落的讀取:這個類別支援 GetHash 方法會傳回一個整數,可唯一識別物件。 應該閱讀: 這個類別支援 GetHashCode 方法會傳回一個整數,可唯一識別物件。 頁面 213: 值] 屬性稱為 Value 屬性在頁面 213,最後一句會讀取:」,您也可以逐一這些值來逐一查看 Value 屬性代替,如這個範例所示:" 應該閱讀: 」,您也可以逐一這些值來逐一查看 [值] 屬性改,如這個範例所示:" 遺漏註解頁面 214: 程式碼範例在頁面 214,在第二個 VB 程式碼範例的程式碼的第六個行遺漏註解。變更: 若要: 頁面 215: 程式碼範例包含語法錯誤在頁面 215,線條 2 的第二個 VB 程式碼範例會含有語法錯誤。變更: 若要: Hashtable 功能的頁面 216: 不正確描述在頁面 216,在頁面上的第二個句子會讀取:「 這種情況下是提供類別,計算相等 Hashtable ’s 能力會進來 」。 應該閱讀: 「 這種情況下是使用類別,計算相等 Hashtable ’s 能力會進來 」。 頁面 216: 介面稱為類別在頁面 216 前, 兩個句子的第二個段落閱讀:"Hashtable 類別支援可以接受 IEqualityComparer 類別做為引數的執行個體的建構函式。更像 IComparer 類別允許您排序集合的課程 1] 所示,IEqualityComparer 介面支援兩種方法: GetHashCode 和 Equals" 他們應該閱讀: "Hashtable 類別支援可以接受 IEqualityComparer 介面做為引數的執行個體的建構函式。更像 IComparer 介面允許您排序集合的課程 1] 所示,IEqualityComparer 介面支援兩種方法: GetHashCode 和 Equals" BitArray 範例中所使用的頁面 227: 不正確的 VB 程式碼在頁面 227,會讀取 VB 程式碼,在步驟 4 中的第二個部分:應該閱讀: BitArray 範例中使用的頁面 228: 不正確 C# 程式碼在頁面 228: 上方的分頁讀取 C# 程式碼範例:應該閱讀: 頁面 228: 四位元參考三位元的位置頁面 228 上的 [如何使用第三個段落的第二個句子的位元遮罩區段 BitVector32 讀取:"假設您需要設定一些 32 位元整數的第一四位元值 」。 應該閱讀: "假設您需要在有些 32 位元的整數中設定第三位元值 」。 一節的步驟 4 的第一個句子會讀取: "重複步驟 1 到 3 直到您有四位元遮罩時 」。 應該閱讀: "重複步驟 1 到 3 直到您有三位元遮罩時 」。 頁面 230: 位元稱為位元組在頁面 230,瞭解二進位 Math 一節中第二個段落的第八個句子會讀取:」 因此如果不帶正負號的位元組填入的所有 8 個位元組可以表示由這個方程式: 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = 255" 應該閱讀: 」 因此如果不帶正負號的位元組填入的所有 8 位元可以表示由這個方程式: 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = 255" 頁面 230: 不帶正負號應該簽署在頁面 230,瞭解二進位 Math 區段中最後一個段落的第四個句子指為不帶正負號的整數,而不是帶正負號的整數。變更: 「 complicating 更多的事情是整數的 [BitVector32 實際上會使用為不帶正負號的整數所以最後一個數字是整數的實際 –(2^31),而負值範圍的 32 位元帶正負號,處理事實 」。 至: 「 complicating 更多的事情是整數的,[BitVector32 實際上可以使用帶正負號的整數所以最後一個數字是整數的實際 –(2^31),而負值範圍的 32 位元帶正負號,處理事實 」。 頁面 232: 98314 應該是 196634 而且 00000000000000011000000000001010 應該 00000000000000110000000000011010在頁面 232,BitVector32 變數的值不正確。變更: " 也可以不算出數 98314 可以儲存 10、 1 和 192,但是 [BitVector32 可以代勞更少的工作與數學"。 至: " 也可以不算出數 196634 可以儲存 10、 1 和 192,但是 [BitVector32 可以代勞更少的工作與數學"。 頁面 234: CollectionsUtil 稱為 CollectionUtil在頁面 234,Case-Insensitive 集合一節的第三個句子會讀取:"因為這是常見的用法,.NET Framework 有 CollectionUtil 類別可支援建立 Hashtable 和 SortedList 物件是不區分大小寫"。 應該閱讀: "因為這是常見的用法,.NET Framework 有 CollectionsUtil 類別可支援建立 Hashtable 和 SortedList 物件是不區分大小寫"。 頁面 235: CollectionsUtil 稱為 CollectionUtil在頁面 235,第二個段落的第六個句子會讀取:"和不區分大小寫的集合不同 CollectionUtil 方法不能用來建立您的集合"。 應該閱讀: "和不區分大小寫的集合不同 CollectionsUtil 方法不能用來建立您的集合"。 頁面 235: 不正確的字串,VB 和 C# 程式碼範例中使用在頁面 235,VB 和 C# 程式碼範例中它會讀取:應該閱讀: 頁面 237:"+ + x +"應該是"x +"在頁面 237 上, 最後一個 C# 程式碼範例的第五個行不正確。變更: 若要: ListCollection 類別名稱,請在步驟 3 中的頁面 238: 不正確的使用方式在頁面 238,會讀取步驟 3:「 專案的 Main 方法中, 建立新的執行個體 ListCollection 類別、 指定不區分大小寫和文化特性不因國別而異"。 應該閱讀: 「 專案的 Main 方法中, 建立新的執行個體 ListDictionary 類別、 指定不區分大小寫和文化特性不因國別而異"。 頁面 239: CollectionsUtil 稱為 CollectionUtil在頁面 239,會讀取第三個項目符號點:」 您可以建立 Hashtable 和 SortedList 使用 CollectionUtil 類別的物件不區分大小寫版本 」。 應該閱讀: 」 您可以建立 Hashtable 和 SortedList 使用 CollectionsUtil 類別的物件不區分大小寫版本 」。 頁面 246: KeyValuePair 稱為 NameValuePair在頁面 246,在 [表格 4-20] 頁面上的最後一個項目會讀取:"DictionaryEntry NameValuePair < >" 應該閱讀: "DictionaryEntry KeyValuePair < >" 頁面 249: 類別稱為物件頁 249,句子之後第一個程式碼範例會讀取:「 這種方法是比撰寫整個比較物件,用於不常使用的比較來得簡單許多 」。 應該閱讀: 「 這種方法是比撰寫整個比較類別用於不常使用的比較來得簡單許多 」。 頁面 249: ReverseIntComparison 應該是 AddressOf ReverseIntComparison在頁面 249 上, 第一個 VB 程式碼範例不正確。變更: 若要: 頁面 250: 字典參照為一個佇列在頁面 250,泛型字典類別區段的第四個句子會讀取:"將泛型佇列型別中,您可以遵循下列步驟:" 應該閱讀: "將泛型字典型別中,您可以遵循下列步驟:" VB 程式碼範例不正確的頁面 250: 第一行在頁面 250,VB 程式碼範例的第一行會讀取:應該閱讀: 頁面 254: KeyValuePair 稱為 NameValuePair在頁面 254,下列表格 4-23 段落的第二個句子會讀取:「 這種行為是不像泛型字典型別列舉值傳回泛型 NameValuePair 物件的位置 」。 應該閱讀: 「 這種行為是不像泛型字典型別列舉值傳回泛型 KeyValuePair 物件的位置 」。 頁面 258: ReadOnlyCollectionBase 參考類別做為 ReadOnlyCollection 基底在頁面 258,撰寫您自己集合一節中第五個段落的第一個句子會讀取:"不 CollectionBase 和 ReadOnlyCollection 基底類別,像 [DictionaryBase 實作 IDictionary、 IEnumerable 和 ICollection 介面"。 應該閱讀: "與 CollectionBase 和 ReadOnlyCollectionBase 的類別不同的是 [DictionaryBase 實作 IDictionary、 IEnumerable 和 ICollection 介面"。 頁面 259: 的詞彙用呼叫的代碼"取代"狀態縮寫"在頁面 259,在練習 1 中的第一個句子會讀取:"在此練習您,建立泛型字典以保存狀態縮寫,以其完整名稱。 應該閱讀: "在此練習您,建立泛型字典來保留呼叫代碼具有其完整名稱。 頁面 280,281:"XML"使用來代替 SOAP"頁面] 280 和 281 上標題的表格 5-1 會讀取:XML 序列化屬性 應該閱讀: SOAP 序列化屬性 頁面 286: SoapFormatter 遺漏在頁面 286,問題 1 的回答 A 會省略 SoapFormatter 的參考。變更: 「 BinaryFormatter 的 A.的執行個體 」 至: A.BinaryFormatter 或 SoapFormatter 的執行個體" 頁面 287: 序列化中使用的地方的還原序列化在頁面 287,問題 4 會讀取:"下列介面的哪一個應該您實作,您可以執行方法之後您類別的執行個體序列化,? 」 應該閱讀: "下列介面的哪一個應該您實作,您可以執行方法之後您類別的執行個體還原序列化,? 」 頁面 292: 遺漏中範例程式碼的數量一行在頁面 292,範例程式碼,以序列化頁面中間的類別會讀取:應該閱讀: 頁面 301: XML 應為 XML在頁面 301,六個的檢閱問題的答案會使用 XML,而不是 XML。在解答問題 2 變更: "B.XMLType C.XMLElement D.XMLAttribute" 至: "B.XmlType C.XmlElement D.XmlAttribute" 解答問題 4 在變更: "A.XMLType B.XMLIgnore C.XMLElement D.XMLAttribute" 至: "A.XmlType B.XmlIgnore C.XmlElement D.XmlAttribute" 頁面 305: OnDeserialized 應該是 OnDeserializing在頁面 305,最後一句參考 OnDeserialized OnDeserializing 代替。變更: "應該在這個事件期間執行的方法套用 OnDeserialized 屬性"。 至: "應該在這個事件期間執行的方法套用 OnDeserializing 屬性"。 頁面 306: OnDeserializing 應該是 OnDeserialized在頁面 306,Deserialized 區段的最後一句參考 OnDeserializing,而不是 OnDeserialized。變更: "應該在這個事件期間執行的方法套用 OnDeserializing 屬性"。 至: "應該在這個事件期間執行的方法套用 OnDeserialized 屬性"。 頁面 343: image.FromFile shoudl 是新的點陣圖在頁面 343,第二個 VB 程式碼範例會使用 Image.FromFile,而不是新的點陣圖。變更: 「 漸暗為點陣圖 B = image.FromFile (C:\windows\gone fishing.bmp)" 至: 「 漸暗為點陣圖 B = 新的點陣圖 (C:\windows\gone fishing.bmp)" 頁面 370: ThreadState.WaitJoinSleep 代替 ThreadState.WaitSleepJoin 參考在頁面 370,插斷表格 7-2 的描述會讀取:"會引發一個 ThreadInterruptedException 執行緒在封鎖的狀態 (ThreadState.WaitJoinSleep) 時。如果執行緒永遠不會封鎖中斷永遠不會發生"。 應該閱讀: "會引發一個 ThreadInterruptedException 執行緒在封鎖的狀態 (ThreadState.WaitSleepJoin) 時。如果執行緒永遠不會封鎖中斷永遠不會發生"。 頁面 373: 執行緒參考值的位置在頁面 373,會讀取第一個段落的最後一句:"稍後在我們將使用此執行緒以查看哪些工作在哪一個執行緒上完成"。 應該閱讀: 「 稍後在我們將使用這個值以查看哪些工作在哪一個執行緒上完成"。 在方法名稱] 和 [輸出頁面 373: 修正片語在頁面 373,以下程式碼範例的第一組段落的第一和第二個句子會讀取:"在呼叫開始方法 SomeWork 方法稱為新執行緒上,執行緒執行,直到該方法完成為止。在此範例,我們 SimpleWork 方法寫入片語在執行緒而顯示 ManagedThreadId 屬性"。 應該閱讀: "在呼叫開始方法 SimpleWork 方法稱為新執行緒上,執行緒執行,直到該方法完成為止。在此範例,我們 SimpleWork 方法寫入片語 」 的往來文章 #"而顯示 ManagedThreadId 屬性"。 頁面 377: ThreadStart 委派 StartThread 作為參考在頁面 377,到執行緒] 區段的 [傳遞] 資料的前三個句子閱讀:"在每個較早的範例中我們已使用沒有使用參數的 [StartThread] 委派。在大部分真實世界使用的執行緒處理,您必須將資訊傳遞至個別的執行緒。若要執行此動作您需要使用新的委派呼叫 ParameterizedStartThread"。 他們應該閱讀: "在每個較早的範例中我們已使用 ThreadStart 委派其中沒有使用參數。在大部分真實世界使用的執行緒處理,您必須將資訊傳遞至個別的執行緒。若要執行此動作您需要使用新的委派呼叫 ParameterizedThreadStart"。 頁面 378: 遺漏分行符號的程式碼範例中在頁面 378,第一行的程式碼範例會讀取:應該閱讀: 在 C# 程式碼範例陳述式中頁面 378: 不正確的程式碼在頁面 378,C# 程式碼範例會讀取:應該閱讀: 參考的工作狀態的位置的頁面 380: 網域在頁面 380,在頁面上的第一個句子會讀取:「 若要解決此問題的離開不一致的網域中的物件或在 AppDomain,執行緒類別有兩種重要的靜態方法: BeginCriticalRegion 和 EndCriticalRegion" 應該閱讀: 「 若要解決此問題的將物件或在 AppDomain 留在不一致的狀態,執行緒類別有兩種重要的靜態方法: BeginCriticalRegion 和 EndCriticalRegion" 頁面 383: 包含參考的位置使用陳述式的陳述式在頁面 383,會讀取步驟 3:"新類別中加入的包含陳述式 (或 Imports 陳述式的 Visual Basic) System.Threading 命名空間"。 應該閱讀: "新類別中加入 Using 陳述式 (或 Imports 陳述式的 Visual Basic) 到 System.Threading 命名空間" 頁面 383: StartThread 代替 ThreadStart 參考在頁面 383,步驟 7 會讀取:返回 [主要] 方法中並建立新的 StartThread 委派指向 Counting 方法。 應該閱讀: 返回 [主要] 方法中並建立新的 ThreadStart 委派指向 Counting 方法。 頁面 387: 聯鎖類別參考 Interlocked 類別的位置在頁面 387,會讀取第一個項目符號點:"執行不可部分完成的作業使用聯鎖類別 」。 應該閱讀: "執行不可部分完成的作業使用 Interlocked 類別 」。 頁面 389: 從記憶體讀取稱為讀入記憶體在頁面 389,第二個句子段落先前的圖 7-2 讀取:如所示圖 7-2,兩個執行緒可以每個值讀入記憶體和更新它們以相同的更新值 >。 應該閱讀: 如所示圖 7-2,兩個執行緒可以每個從記憶體讀取值和一次更新它們以相同的更新值 >。 UpdateCount 方法的位置所參考的分頁 390: AddCount 方法在頁面上 390 表格 7-7 讀取後第一句:「 我們可以變更使用 Interlocked 類別來解決執行緒的問題我們 AddCount 方法如下:" 應該閱讀: 「 我們可以變更使用 Interlocked 類別來解決執行緒的問題我們 UpdateCount 方法如下:" 頁面 394: C# 程式碼範例不正確在頁面 394,C# 程式碼範例不正確地鎖定在公用的執行個體,其中它應該是私用,它也使用不正確的運算子 _evenCount 變數中。變更: 若要: 程式碼範例中所需的頁面 396: Thread.Sleep 方法在頁面 396,C# 程式碼範例遺漏 Thread.Sleep 方法。變更: 若要: 從程式碼範例中遺失的頁面 397: AddressOf在頁面 397,Visual Basic 程式碼範例的第三個和第四行不正確。變更: 若要: 頁面 407: EventWaitHandles 代替 EventWaitHandle 參考在頁面 407,第三句的最後的段落會讀取:"當建立或開啟具名的事件,您需要將代替 AutoResetEvent 和 ManualResetEvent 類別處理 EventWaitHandles"。 應該閱讀: "當建立或開啟具名的事件,您需要將代替 AutoResetEvent 和 ManualResetEvent 類別處理 EventWaitHandle"。 頁面 410: 聯鎖類別參考 Interlocked 類別的位置在頁面 410,會讀取第一個項目符號點:"進行不可部分完成的算術運算使用聯鎖類別 」。 應該閱讀: "進行不可部分完成的算術運算使用 Interlocked 類別 」。 頁面 414: 位元組寫入參考讀取位元組的位置在頁面 414,第一個段落的第一個句子會讀取:"差異包括它會傳回而不是寫入的位元組數的 IAsyncResult 和兩個參數會加入至方法簽名碼來支援 APM 」。 應該閱讀: "差異包括它會傳回而不是讀取的位元組數的 IAsyncResult 和兩個參數會加入至方法簽名碼來支援 APM 」。 第一句後面第二個程式碼範例會讀取: 作業結尾會呼叫 EndRead 與 IAsyncResult 物件中,它會傳回寫入的位元組。 應該閱讀: 作業結尾會呼叫與 IAsyncResult 物件 EndRead 和讀取位元組,它會傳回 >。 不需要的頁面 415: strm.Read 方法在頁面 415,在 C# 第一行程式碼範例] 下的"/ / 製成非同步呼叫"註解不是必要。移除下列程式碼行: 從程式碼範例中遺失的頁面 417: AddressOf在頁面 417,VB 程式碼範例的 「 第十行遺漏 AddressOf。變更: 至: 參考類別的位置的頁面 419: 事件在頁面 419,Windows Form 應用程式例外處理方塊第三句會讀取:"您只要註冊 ThreadException 事件對應用程式事件"。 應該閱讀: "您只要註冊 ThreadException 事件在應用程式類別上"。 頁面 421: QueueWorkItem 代替 QueueUserWorkItem 參考在頁面 421,在頁面上的第一個句子會讀取:"建立新的執行緒和控制它,替代的我們可以使用 [ThreadPool 藉由使用其 QueueWorkItem 方法執行這項工作:" 應該閱讀: "建立新的執行緒和控制它,替代的我們可以使用 [ThreadPool 藉由使用其 QueueUserWorkItem 方法執行這項工作:" 包含在程式碼範例中的頁面 421: 外加右括號在頁面 421,第二個程式碼範例會讀取:應該閱讀: 頁面 424: RegisterWaitHandle 代替 RegisterWaitForSingleObject 參考在頁面 424,ThreadPool 和 WaitHandle 的第三句區段讀取:"是藉由呼叫 [ThreadPool.RegisterWaitHandle 如下列範例所示:" 應該閱讀: "是藉由呼叫 [ThreadPool.RegisterWaitForSingleObject 如下列範例所示:" misrepresented 頁面 429: 執行緒執行行為在頁面 429,會讀取最後一句的步驟 8:"附註部份工作項目在不同的執行緒上執行 」。 應該閱讀: "附註部份工作項目可能會在不同執行緒上執行 」。 頁面 432: 此時 misrepresented 案例主題在頁面 432,情況分析藍本區段的第一個句子會讀取:"在下列案例的案例中您將會套用您學到關於如何使用應用程式定義域和服務"。 應該閱讀: "在下列案例的案例中您將會套用您學到關於此章節的主題"。 ASP.NET 背景工作處理序不正確的頁面 438: 說明在頁面 438 中第一個段落, 的第二個句子會包含 ASP.NET 的不一致。變更: 「 如果 10 人同時造訪 ASP.NET 網站,ASP.NET 將會建立為每個使用者的個別的應用程式定義域 」。 至: "在一個 ASP.NET 背景工作處理序中會有一個應用程式定義域,每個 Web 站台。 相同的 Web 站台的使用者將所有內容中執行相同的應用程式定義域"。 頁面 454: VB 和 C# 程式碼範例包含不必要的行程式碼在頁面 454,步驟 3,第 2 行的 [VB 和 C# 程式碼是多餘的應該移除。移除從 VB 程式碼: 從 C# 程式碼中移除: 頁面 456: 回答 D 的問題 3 部分不正確在頁面 456 的問題 3 解答 D 會讀取:"建立 AppDomainSetup] 類別的執行個體,然後將應用程式基底屬性設定。傳遞 AppDomainSetup 物件到 AppDomain 建構函式"。 應該閱讀: 建立 AppDomainSetup] 類別的執行個體中,然後將應用程式基底屬性設定。 在資料表上的網頁 481-482: 不正確標題481 和 482 的頁面上標題的表格 9-1 會讀取:ConfigurationManager 屬性和方法 > 應該閱讀: 組態屬性和方法 > 頁面 483: 設定應該是 ConfigurationManager在頁面 483,標題的表格 9-2 是不正確的。變更: 表 9 2 組態屬性及方法" 至: 表 9 2 ConfigurationManager 屬性及方法" 頁面 490: 不正確的程式碼範例在頁面 490,thecode 樣本不正確。變更: 至: Microsoft 按將致力於提供有用的資訊和精確的書籍。所有註解和更正上列準備就緒可納入本書的未來 printings。如果您本書的再版它可能已經包含大部分或所有上述的更正。 這篇文章中的資訊適用於:
機器翻譯重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。 按一下這裡查看此文章的英文版本:935218?
(http://support.microsoft.com/kb/935218/en-us/
)
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。 | 其他資源 其他支援網站社群文章翻譯 |






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


回此頁最上方