C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: IEnumerableの実装で基本がわかりません。


(過去ログ 13 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■4148 / inTopicNo.1)  IEnumerableの実装で基本がわかりません。
  
□投稿者/ 中尾 (4回)-(2007/06/07(Thu) 21:11:54)

分類:[C# (Windows)] 

またお世話になります。
IEnumerableをLinearListクラスで実装しているにもかかわらず、
IEnumerableにあるMoveNext、Resetの両メソッドを定義していない
のに動作する理由が分かりません。
基本過ぎて申し訳ありませんが教えていただけないでしょうか。
お願い致します。

using System;
using System.Collections;

/// <summary>
/// 片方向連結リストクラス
/// </summary>
class LinearList : IEnumerable
{
/// <summary>
/// 連結リストのセル
/// </summary>
private class Cell
{
public object value;
public Cell next;

public Cell(object value, Cell next)
{
this.value = value;
this.next = next;
}
}

/// <summary>
/// LinearList の列挙子
/// </summary>
private class LinearListEnumerator : IEnumerator
{
private LinearList list;
private Cell current;

public LinearListEnumerator(LinearList list)
{
this.list = list;
this.current = null;
}

/// <summary>
/// コレクション内の現在の要素を取得
/// </summary>
public object Current
{
get{return this.current.value;}
}

/// <summary>
/// 列挙子をコレクションの次の要素に進める
/// </summary>
public bool MoveNext()
{
if(this.current == null)
this.current = this.list.head;
else
this.current = this.current.next;

if(this.current == null)
return false;
return true;
}

/// <summary>
/// 列挙子を初期位置に戻す
/// </summary>
public void Reset()
{
this.current = null;
}
}

private Cell head;

public LinearList()
{
head = null;
}

/// <summary>
/// リストに新しい要素を追加
/// </summary>
public void Add(object value)
{
head = new Cell(value, head);
}

/// <summary>
/// 列挙子を取得
/// </summary>
public IEnumerator GetEnumerator()
{
return new LinearListEnumerator(this);
}
}

class ForeachSample
{
static void Main()
{
LinearList list = new LinearList();

for(int i=0; i<10; ++i)
{
list.Add(i * (i + 1) / 2);
}

foreach(int s in list)
{
Console.Write(s + " ");
}
}
}


引用返信 編集キー/
■4150 / inTopicNo.2)  Re[1]: IEnumerableの実装で基本がわかりません。
□投稿者/ 中尾 (6回)-(2007/06/07(Thu) 21:29:23)
すみません。
見間違えていました。
質問を変えさせてください
IEnumrableインターフェースにはGetEnumeratorメソッドが
あるのになぜ定義されていないのかをお教え願えますでしょうか
お願い致します
引用返信 編集キー/
■4151 / inTopicNo.3)  Re[1]: IEnumerableの実装で基本がわかりません。
□投稿者/ επιστημη (536回)-(2007/06/07(Thu) 21:30:58)
επιστημη さんの Web サイト
2007/06/07(Thu) 21:35:46 編集(投稿者)

# 図表モードにしてくれよ頼むから。読みにくいったらありゃしない。
# それと分類「未選択」はできる限り使うもんじゃありません。

> IEnumerableをLinearListクラスで実装しているにもかかわらず、
> IEnumerableにあるMoveNext、Resetの両メソッドを定義していない
> のに動作する理由が分かりません。

IEnumerableはGetEnumerator()によってIEnumeratorを返すだけ。
MoveNext,Corrent,Resetが必要なのは(IEnumerableじゃなく)IEnumerator。

> IEnumrableインターフェースにはGetEnumeratorメソッドが
> あるのになぜ定義されていないのかをお教え願えますでしょうか

定義されてるやん。

/// <summary>
/// 列挙子を取得
/// </summary>
public IEnumerator GetEnumerator()
{
return new LinearListEnumerator(this);
}

引用返信 編集キー/
■4153 / inTopicNo.4)  Re[2]: IEnumerableの実装で基本がわかりません。
□投稿者/ 中尾 (7回)-(2007/06/07(Thu) 23:10:14)
class LinearList : IEnumerable
{
/// <summary>
/// 連結リストのセル
/// </summary>
private class Cell
{
public object value;
public Cell next;

public Cell(object value, Cell next)
{
this.value = value;
this.next = next;
}
}
でIEnumerableを実装しているのにないと思ったのですが

/// <summary>
/// 列挙子を取得
/// </summary>
public IEnumerator GetEnumerator()
{
return new LinearListEnumerator(this);
}
で定義されていることになるってことですか?
すみません、理解がまだできません。
お願いいたします

引用返信 編集キー/
■4154 / inTopicNo.5)  Re[3]: IEnumerableの実装で基本がわかりません。
□投稿者/ επιστημη (537回)-(2007/06/07(Thu) 23:19:02)
επιστημη さんの Web サイト
# だーからちゃんとインデントしてくれってば

No4153 (中尾 さん) に返信
> class LinearList : IEnumerable
> {
> /// <summary>
> /// 連結リストのセル
> /// </summary>
> private class Cell
> {
> public object value;
> public Cell next;
>
> public Cell(object value, Cell next)
> {
> this.value = value;
> this.next = next;
> }
> }
> でIEnumerableを実装しているのにないと思ったのですが

まだカッコ開いたまま。IEnumerableの実装は終わってません。


引用返信 編集キー/
■4166 / inTopicNo.6)  Re[4]: IEnumerableの実装で基本がわかりません。
□投稿者/ 中尾 (10回)-(2007/06/08(Fri) 14:20:03)
επιστημη さんありがとうございます
本当ですね
これはクラスを入れ子にしてるってことですか
クラスの入れ子にする利点が分からないですが
定義してることは分かりました。


もう少しコードをよく読み考えて見ます。
またこのコードで分からなかったら質問
させてください
中尾

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -