60 lines
843 B
C#
60 lines
843 B
C#
|
//
|
||
|
// Test that the foreach statement generated by mcs invokes the Dispose()
|
||
|
// method even if the enumerator class returned by GetEnumerator () does not
|
||
|
// implement IDisposable.
|
||
|
//
|
||
|
|
||
|
using System;
|
||
|
|
||
|
public class Enumerator {
|
||
|
|
||
|
int counter;
|
||
|
|
||
|
public Enumerator () {
|
||
|
counter = 3;
|
||
|
}
|
||
|
|
||
|
public bool MoveNext () {
|
||
|
return (counter -- > 0);
|
||
|
}
|
||
|
|
||
|
public char Current {
|
||
|
get {
|
||
|
return 'a';
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class RealEnumerator : Enumerator, IDisposable {
|
||
|
|
||
|
Coll c;
|
||
|
|
||
|
public RealEnumerator (Coll c) {
|
||
|
this.c = c;
|
||
|
}
|
||
|
|
||
|
public void Dispose () {
|
||
|
c.disposed = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public class Coll {
|
||
|
|
||
|
public bool disposed;
|
||
|
|
||
|
public Enumerator GetEnumerator () {
|
||
|
return new RealEnumerator (this);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class Test {
|
||
|
|
||
|
public static int Main(String[] args)
|
||
|
{
|
||
|
Coll coll = new Coll ();
|
||
|
foreach (char c in coll) {
|
||
|
}
|
||
|
return (coll.disposed ? 0 : 1);
|
||
|
}
|
||
|
}
|