Obsolete Attribute คืออะไร?
Attribute ใน System namespace ใช้ทำเครื่องหมาย Class, Method, Property, Field, Delegate ว่า Deprecated/Legacy
- อ่านตอน Compile-time
- สร้าง Warning หรือ Error ให้ Developer
- ช่วย Migration จาก Method เก่าไปใหม่
Constructor Overloads 3 แบบ
| Syntax | พฤติกรรม |
|---|---|
[Obsolete] | Warning แบบ Default message |
[Obsolete("message")] | Warning พร้อมข้อความแนะนำ |
[Obsolete("message", true)] | Error (Build Fail) พร้อมข้อความ |
ตัวอย่างโค้ด
using System;
namespace DemoApplication
{
class Demo
{
static void Main(string[] args)
{
ObsoleteMethod(); // Warning
ObsoleteMethodWithMessage(); // Warning + Message
ObsoleteMethodWithMessageNoError(); // Warning + Message
// ObsoleteMethodWithMessageError(); // Compile ERROR!
Console.ReadLine();
}
[Obsolete]
public static void ObsoleteMethod() { }
[Obsolete("Use NewMethod() instead")]
public static void ObsoleteMethodWithMessage() { }
[Obsolete("Use NewMethod() instead", false)]
public static void ObsoleteMethodWithMessageNoError() { }
[Obsolete("This method is removed. Use NewMethod()", true)]
public static void ObsoleteMethodWithMessageError() { }
// Method ใหม่แทนที่
public static void NewMethod()
{
Console.WriteLine("New implementation");
}
}
}
Output ใน Visual Studio
// Warning CS0618: 'Demo.ObsoleteMethod()' is obsolete // Warning CS0618: 'Demo.ObsoleteMethodWithMessage()' is obsolete: 'Use NewMethod() instead' // Error CS0618: 'Demo.ObsoleteMethodWithMessageError()' is obsolete: 'This method is removed...'
Best Practices
- ข้อความชัดเจน: บอก Method ใหม่คืออะไร, ทำไมถึง Deprecated
- Phase Approach: เริ่ม Warning (false) → ภายหลัง Error (true)
- Documentation: อัปเดต XML Docs ให้ `
` - Versioning: ระบุ Version ที่ Deprecated และ Version ที่จะ Remove
ตัวอย่าง Production-Ready
[Obsolete("Use CalculateTotalAsync() instead. This method will be removed in v3.0.", false)]
public decimal CalculateTotal(Order order) { ... }
///
/// Calculates total asynchronously. Replaces CalculateTotal().
///
public async Task<decimal> CalculateTotalAsync(Order order) { ... }