C # 2.0 - Constraints

zhaozj2021-02-16  56

19.1.1 Constraints

Commonly, a generic class will do more than just store data based on a type parameter. Often, the generic class will want to invoke methods on objects whose type is given by a type parameter. For example, an Add method in a Dictionary Class Might NEED TO Compare Keys Using a Compareto Method:

Public Class Dictionary {public void add (k Key, v value) {...

IF (key.compareto (x) <0) {...} // error, no compareto method ...}}

Since the type argument specified for K could be any type, the only members that can be assumed to exist on the key parameter are those declared by type object, such as Equals, GetHashCode, and ToString; a compile-time error therefore occurs in the EXAMPLE ABOVE. IT IS of Course Possible To Cast The Key Parameter To A Type That Contains a Compareto Method. For Example, The Key Parameter Could Be Cast To IComparable:

Public Class Dictionary {public void add (k Key, v value) {...

IF ((iComparable) key) .compareto (x) <0) {...} ...}}

While this solution works, it requires a dynamic type check at run-time, which adds overhead. It furthermore defers error reporting to run-time, throwing an InvalidCastException if a key does not implement IComparable.

转载请注明原文地址:https://www.9cbs.com/read-19566.html

New Post(0)