จะทำเครื่องหมายวิธีที่ล้าสมัยหรือเลิกใช้แล้วได้อย่างไร


1003

ฉันจะทำเครื่องหมายวิธีที่ล้าสมัยหรือเลิกใช้แล้วโดยใช้C # ได้อย่างไร


นี่คือวิดีโอ YouTube ที่อธิบายแอตทริบิวต์เลิกใช้ทั้ง 3 รูปแบบ: youtube.com/watch?v=_AQ5wsPnfJ4
Shivprasad Koirala

3
อย่าลืมว่ายังมี[EditorBrowsable(EditorBrowsableState.Never)]( stackoverflow.com/a/9086345/661933 ) ทำหน้าที่วัตถุประสงค์ที่แตกต่างกันเล็กน้อย
nawfal

คำตอบ:


1594

ทางที่สั้นที่สุดคือโดยการเพิ่มObsoleteAttributeเป็นแอตทริบิวต์กับวิธีการ ตรวจสอบให้แน่ใจว่าได้รวมคำอธิบายที่เหมาะสม:

[Obsolete("Method1 is deprecated, please use Method2 instead.")]
public void Method1()
{  }

คุณยังสามารถทำให้การคอมไพล์ล้มเหลวโดยถือว่าการใช้วิธีนี้เป็นข้อผิดพลาดแทนที่จะเป็นการเตือนหากวิธีการนั้นถูกเรียกจากที่ใดที่หนึ่งในรหัสเช่นนี้:

[Obsolete("Method1 is deprecated, please use Method2 instead.", true)]

97
ถ้าคุณต้องการรวบรวมเพื่อโยนความผิดพลาดถ้าใครใช้วิธีการใช้งานวิธีการมากเกินไปเลิก (String ข้อความข้อผิดพลาดบูล)
HitLikeAHammer

140
ล้าสมัยโดยไม่มีคำอธิบายควรจะล้าสมัย ... notherdev.blogspot.com/2013/02/obsolete-should-be-obsolete.html
dotjoe

31
ในตัวอย่างของคุณส่วน "Method1 is deprecated" ค่อนข้างซ้ำซ้อน โดยการทำเครื่องหมายว่าล้าสมัยคุณกำลังบอกว่ามันล้าสมัยจริง ๆ ดังนั้นจึงไม่จำเป็นต้องเรียกคืนในข้อความ โดยเฉพาะอย่างยิ่งเนื่องจากคำเตือน / ข้อผิดพลาดที่เกิดขึ้นจะอ่าน 'Method1' ล้าสมัย: 'Method1 ถูกเลิกใช้แล้วโปรดใช้ Method2 แทน'
irreal

8
ไม่เป็นไร. ฉันเพิ่งวางข้อความตัวอย่างไว้ที่นั่นเพื่อแสดงว่าคุณสามารถเพิ่มข้อความที่เฉพาะเจาะจงมากขึ้นถ้าคุณต้องการ
Chris Ballance

14
@ akshay2000 การเปลี่ยนชื่อหรือลบเมธอดจะทำให้ผู้บริโภคไร้ความกังวลเกี่ยวกับสาเหตุที่เปลี่ยนชื่อหรือลบออกและควรใช้อะไรแทน
Lensflare

136

วิธีทำเครื่องหมายว่าล้าสมัยด้วยคำเตือน:

[Obsolete]
private static void SomeMethod()

คุณได้รับคำเตือนเมื่อใช้งาน:

แสดงคำเตือนที่เลิกใช้แล้ว

และด้วย IntelliSense:

คำเตือนที่เลิกใช้แล้วด้วย IntelliSense

หากคุณต้องการข้อความ:

[Obsolete("My message")]
private static void SomeMethod()

นี่คือเคล็ดลับเครื่องมือ IntelliSense:

IntelliSense แสดงข้อความที่ล้าสมัย

ในที่สุดหากคุณต้องการให้การใช้งานถูกตั้งค่าสถานะเป็นข้อผิดพลาด:

[Obsolete("My message", true)]
private static void SomeMethod()

เมื่อใช้นี่คือสิ่งที่คุณจะได้รับ:

การใช้วิธีการแสดงเป็นข้อผิดพลาด

หมายเหตุ: ใช้ข้อความเพื่อบอกให้คนอื่น ๆ ทราบว่าควรใช้อะไรแทนเพราะเหตุใดจึงล้าสมัย


66

Obsoleteเพิ่มคำอธิบายประกอบกับวิธีการใช้คำว่า ข้อความอาร์กิวเมนต์เป็นตัวเลือก แต่เป็นความคิดที่ดีในการสื่อสารว่าทำไมรายการนี้จึงล้าสมัยและ / หรือจะใช้อะไรแทน
ตัวอย่าง:

[System.Obsolete("use myMethodB instead")]
void myMethodA()

36

ด้วยObsoleteAttributeคุณสามารถที่จะแสดงวิธีการเลิก แอตทริบิวต์ล้าสมัยมีสามคอนสตรัค:

  1. [Obsolete]: เป็นตัวสร้างพารามิเตอร์ที่ไม่มีและเป็นค่าเริ่มต้นโดยใช้คุณลักษณะนี้
  2. [Obsolete(string message)]:ในรูปแบบนี้คุณจะได้รับmessageสาเหตุที่เลิกใช้วิธีนี้
  3. [Obsolete(string message, bool error)]:ในข้อความรูปแบบนี้มีความชัดเจนมาก แต่errorหมายถึงในเวลาการรวบรวมคอมไพเลอร์จะต้องแสดงข้อผิดพลาดและทำให้การรวบรวมล้มเหลวหรือไม่

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.