using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TestE
{
class User
{
public User(string name) { _name = name; }
public string Name{ get{ return _name;} }
string _name;
}
class DBManager : IEnumerable
{
public DBManager()
{
_onlineUsers.Add (new User ("tom"));
_onlineUsers.Add (new User ("Krista"));
_onlineUsers.Add (new User ("Emma"));
}
public IEnumerator GetEnumerator() //이 함수를 불릴때 원소를 복사하는 방식 => 메모리 측면에서 효율적인 방법은 아님
{
return new Enumerator (_onlineUsers);
}
ArrayList _onlineUsers = new ArrayList();
class Enumerator : IEnumerator
{
const string INVALID_RECORD = "use ss";
public Enumerator(ArrayList onlineUsers)
{
foreach(User user in onlineUsers)
{
this._onlineUsers.Add(user);
}
Reset();
}
public bool MoveNext()
{
return ++_index < _onlineUsers.Count;
}
public object Current
{
get
{
if (_index == -1)
throw new InvalidOperationException (INVALID_RECORD);
if (_index < _onlineUsers.Count)
return _onlineUsers [_index];
else
return null;
}
}
public void Reset(){ _index = -1; }
int _index;
ArrayList _onlineUsers = new ArrayList();
}
}
class Program
{
static void Main(string[] args)
{
DBManager db = new DBManager ();
IEnumerator e = db.GetEnumerator ();
while (e.MoveNext ()) {
User user = (User)e.Current;
Console.WriteLine ("{0}", user.Name);
}
foreach (User user in db) {
Console.WriteLine ("{0}", user.Name);
}
Console.ReadLine ();
}
}
}
'프로그래밍(Programming) > C#' 카테고리의 다른 글
C# | DLL 만들고 사용하기 (0) | 2015.09.02 |
---|---|
리플렉션(refelction) 활용 (0) | 2015.09.01 |
delegate 와 event 차이 , 이벤트 인스턴스 저장 (0) | 2015.09.01 |
delegate (0) | 2015.08.31 |
delegate 위임이란, 간략 사용법 (0) | 2015.08.31 |