www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Re: To interface or not to interface

reply Kagamin <spam here.lot> writes:
Steven Schveighoffer Wrote:

 On Tue, 25 May 2010 02:26:02 -0400, Kagamin <spam here.lot> wrote:
 
 Recently I've hit a problem with collections in C#. Given classes
 class A {}
 class B {}
 And two collections Collection<A> and Collection<B> it's possible to  
 concat them into an array A[]. The efficient way to do it is to use  
 CopyTo(T[],int) method, but it accepts only array of exact collection  
 item's type, so I had to change the Collection<B> type to Collection<A>.

Did you mean class B : A {} ?

Ah, yes.
 According to this page, it says that an exception could be thrown if "Type  
 T cannot be cast automatically to the type of the destination array."   
 This implies that a destination array type to which T could automatically  
 be cast should work.

ICollection<A> acoll; ICollection<B> bcoll; A[] cat; ICollection<A>.CopyTo(A[],int) ICollection<B>.CopyTo(B[],int) - note the signature, the destination array can't be an array of supertype. There's no chance to throw an exception because the code doesn't pass type check at compile time.
May 27 2010
parent Kagamin <spam here.lot> writes:
 ICollection<A> acoll;
 ICollection<B> bcoll;
 A[] cat;
 ICollection<A>.CopyTo(A[],int)
 ICollection<B>.CopyTo(B[],int) - note the signature, the destination array
can't be an array of supertype. There's no chance to throw an exception because
the code doesn't pass type check at compile time.

To ease understanding: ICollection<Animal> acoll; ICollection<Cat> ccoll; Animal[] animals; ICollection<Animal>.CopyTo(Animal[],int) ICollection<Cat>.CopyTo(Cat[],int)
May 27 2010