IComparable< E > Interface

Một phần của tài liệu Lập trình Windows - Lập Trình C #- Lập Trình C Shap - Chương 5 docx (Trang 43 - 47)

IComparable< E > Interface

Có thể so sánh 2 đối tượng của cùng loại dữ liệu nếu loại dữ liệu đó thực thi generic interface

IComparable<T > (of namespace System).

Khi thực thi giao diện IComparable< T > các đối tượng Icomparable có thể dùng với phương thức sort và search của các lớp trong System.Collections.Generic.

Các loại dữ liệu thực thi IComparable< T > phải khai báo method CompareTo để so sánh các đối tượng.

Ví dụ: nếu có 2 số nguyên int1 và int2, có thể so sánh chúng với biểu thức

Why Use Constraints

Why Use Constraints

Tuy các đối tượng IComparable có thể so sánh được

nhưng mặc định các đối tượng này không thể dùng trong mã generic vì không phải tất cả các loại dữ liệu đều thực thi giao diện IComparable< T >

Compiler phải bảo đảm được là toán tử hay method đang sử dụng đều được hổ trợ bởi đối số loại (type đang sử dụng đều được hổ trợ bởi đối số loại (type argument) .

Việc bảo đảm này sẽ thực hiện được nếu áp dụng 1 hay nhiều constraint vào các định nghĩa generic của hay nhiều constraint vào các định nghĩa generic của lớp, method, interface…

using System;

using System.Collections.Generic; using System.Text;

namespace Constraints { public interface IShape{

double Area { get; } }

public class Circle : IShape

{ public Circle( double radius ) { this.radius = radius; } public double Area

{ get { return Math.Pi*radius*radius; } } private double radius;

}

public class Rect : IShape

{ public Rect( double width, double height ) { this.width = width;

this.height = height; } public double Area {

ExampleExample Example

public class Shapes<T> where T : IShape {

public double TotalArea{ get

{ double acc = 0;

foreach (T shape in shapes) { acc += shape.Area; }

return acc; }

}

public void Add(T shape) (adsbygoogle = window.adsbygoogle || []).push({});

{ shapes.Add(shape); }

private List<T> shapes = new List<T>(); }

public class EntryPoint { static void Main(){

{ Shapes<IShape> shapes = new

Shapes<IShape>(); shapes.Add(new Circle(2)); shapes.Add(new Rect(3, 5)); Example Example Kind of c onstrate: whe re T : <inte rface name>

Một phần của tài liệu Lập trình Windows - Lập Trình C #- Lập Trình C Shap - Chương 5 docx (Trang 43 - 47)