เรียนรู้วิธีใช้อินเทอร์เฟสที่ระบบกําหนด
การรวมอินเทอร์เฟสที่ระบบกําหนดลงในแอปพลิเคชัน C# มีประโยชน์ในสถานการณ์การเข้ารหัสที่ใช้งานได้จริงมากมาย อินเทอร์เฟซที่ระบบกําหนดเองใน C# ช่วยให้คุณสามารถใช้ฟังก์ชันที่กําหนดไว้ล่วงหน้า ทําให้แอปพลิเคชันของคุณสอดคล้องกันและเสถียร
อินเทอร์เฟซทั่วไปที่ใช้ในวิธีการ
อินเทอร์เฟซทั่วไปหลายรายการมักใช้ในวิธีการ C# ภายใน .NET framework อินเทอร์เฟซเหล่านี้ให้ฟังก์ชันการทํางานมาตรฐานที่นํามาใช้โดยคลาสต่างๆ
-
IComparable: ใช้สําหรับเปรียบเทียบวัตถุ -
IEnumerable: ใช้สําหรับวนซ้ําบนคอลเลกชัน -
IDisposable: ใช้สําหรับปล่อยทรัพยากรที่ไม่มีการจัดการ -
IEquatable: ใช้สําหรับกําหนดการเปรียบเทียบความเท่ากัน
ใช้อินเทอร์เฟสที่ระบบกําหนด
ในการใช้สมาชิกอินเทอร์เฟสที่ระบบกําหนด สมาชิกที่สอดคล้องกันของคลาสการใช้งานจะต้องเป็นสาธารณะ ไม่ใช่ staticและมีชื่อและลายเซ็นเดียวกันกับสมาชิกอินเทอร์เฟซ คลาสหรือหลักที่ใช้อินเทอร์เฟซจะต้องนําเสนอการใช้งานสําหรับสมาชิกที่ประกาศทั้งหมดโดยไม่มีการใช้งานเริ่มต้นที่ให้มาโดยอินเทอร์เฟซ
อินเทอร์เฟซที่ระบบกําหนดเองใน .NET มักใช้พื้นที่ที่สํารองไว้ T เพื่อแสดงชนิดใดก็ตาม ตัวอย่างเช่น IEquatable อินเทอร์เฟซจะถูกกําหนดใน .NET framework ดังนี้:
public interface IEquatable
{
bool Equals(T other);
}
เมื่อคุณใช้อินเทอร์เฟซนี้ในคลาส คุณจะแทนที่ T ด้วยชนิดของคลาส
ตัวอย่างเช่น คลาสต่อไปนี้ Car จะใช้ IEquatable อินเทอร์เฟซ:
public class Car : IEquatable
{
public string Make { get; set; }
public string Model { get; set; }
public bool Equals(Car other)
{
if (other == null) return false;
return this.Make == other.Make && this.Model == other.Model;
}
}
ในตัวอย่าง Car นี้ จะ T แทนที่ ใน IEquatableทําให้ IEquatableเป็น คลาส Car มีการนําไปใช้เองของ Equals เมธอด ซึ่งตรวจสอบว่า Make คุณสมบัติ และ Model ของวัตถุปัจจุบัน Car มีค่าเท่ากับคุณสมบัติของ otherCar วัตถุหรือไม่
คุณสมบัติและตัวทําดัชนีของคลาสสามารถกําหนดตัวเข้าถึงพิเศษสําหรับคุณสมบัติหรือตัวทําดัชนีที่กําหนดไว้ในอินเทอร์เฟซ ตัวอย่างเช่น อินเทอร์เฟซอาจประกาศคุณสมบัติที่มี get Accessor คลาสที่ใช้อินเทอร์เฟซสามารถประกาศคุณสมบัติเดียวกันด้วยทั้ง get และ set ผู้เข้าถึง ตัวอย่างมีดังนี้:
public interface IExampleInterface
{
string Name { get; }
}
public class ExampleClass : IExampleInterface
{
public string Name { get; set; }
}
ใน IExampleInterface ตัวอย่างนี้ ประกาศคุณสมบัติ Name ที่มี get Accessor
ExampleClass ใช้อินเทอร์เฟซและประกาศคุณสมบัติเดียวกันด้วยทั้ง get และ set accessor
การใช้อินเทอร์เฟซที่กําหนดโดยระบบทั่วไป
อินเทอร์เฟซทั่วไปที่กําหนดโดยระบบ เช่น IEnumerable, IDisposableและ IComparable มักใช้ในแอปพลิเคชัน .NET อินเทอร์เฟซเหล่านี้มีวิธีการมาตรฐานที่สามารถใช้ได้เพื่อให้แน่ใจว่ามีลักษณะการทํางานที่สอดคล้องกันในประเภทที่แตกต่างกัน
IEnumerable
อินเทอร์เฟซ IEnumerable ถูกใช้เพื่อกําหนดคอลเลกชันที่สามารถแจกแจงได้ ซึ่งประกอบด้วยวิธีการเดียว ซึ่ง GetEnumeratorส่งกลับตัวแจงนับที่ทําซ้ําผ่านคอลเลกชัน
public class MyCollection : IEnumerable
{
private int[] _items = { 1, 2, 3, 4, 5 };
public IEnumerator GetEnumerator()
{
for (int i = 0; i < _items.Length; i++)
{
yield return _items[i];
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
IDisposable
อินเทอร์เฟซ IDisposable ถูกใช้เพื่อปล่อยทรัพยากรที่ไม่มีการจัดการ ทรัพยากรที่ไม่มีการจัดการคือทรัพยากรที่ไม่ได้จัดการด้วยรันไทม์ .NET เช่น ตัวจัดการไฟล์ การเชื่อมต่อเครือข่าย ฯลฯ สิ่งสําคัญคือต้องปล่อยทรัพยากรเหล่านี้หลังจากใช้เพื่อป้องกันการรั่วไหลของหน่วยความจําและปัญหาอื่น ๆ ซึ่งประกอบด้วยวิธีการ Disposeเดียว ซึ่งเรียกว่า แหล่งข้อมูลฟรี
public class ResourceHolder : IDisposable
{
private bool _disposed = false;
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this); // Prevents the garbage collector from calling the finalizer if Dispose has already been called.
}
protected virtual void Dispose(bool disposing)
{
if (!_disposed)
{
if (disposing)
{
// Free managed resources
}
// Free unmanaged resources
_disposed = true;
}
}
~ResourceHolder()
{
Dispose(false);
}
}
ไม่สามารถเทียบได้
อินเทอร์เฟซ IComparable ถูกใช้เพื่อกําหนดวิธีการสําหรับการเปรียบเทียบอินสแตนซ์ของคลาส ซึ่งประกอบด้วยวิธีการเดียว ซึ่งจะ CompareToเปรียบเทียบอินสแตนซ์ปัจจุบันกับวัตถุอื่นที่มีชนิดเดียวกัน
public class Person : IComparable
{
public string Name { get; set; }
public int Age { get; set; }
public int CompareTo(Person other)
{
if (other == null) return 1; // If 'other' is null, this instance is considered greater
return this.Age.CompareTo(other.Age); // Returns negative value if precedes 'other', 0 if same position, or postive value if follows 'other'.
}
}
ในตัวอย่างนี้ หาก other เป็น null เราจะส่งกลับค่า 1 ซึ่งแสดงว่าอินสแตนซ์ปัจจุบันถือว่ามากกว่าการอ้างอิง null
อินเทอร์เฟซที่ระบบกําหนดเองใน C# มีบทบาทสําคัญในการสร้างแอปพลิเคชันที่มีประสิทธิภาพ เสถียร และสม่ําเสมอ ซึ่งมีวิธีการมาตรฐานที่สามารถใช้ได้ในประเภทที่แตกต่างกันเพื่อให้มั่นใจถึงความสม่ําเสมอและความสามารถในการคาดการณ์ในพฤติกรรม ด้วยการทําความเข้าใจและใช้งานอินเทอร์เฟซเหล่านี้อย่างมีประสิทธิภาพ คุณสามารถใช้ฟังก์ชันที่กําหนดไว้ล่วงหน้าและลดปริมาณโค้ดที่ซ้ําซ้อน ทําให้แอปพลิเคชันของคุณบํารุงรักษาและมีประสิทธิภาพมากขึ้นได้