Hele koden er som følger hvis du vil prøve det.
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace EXP2
{
public class DavidFossil : System.Web.UI.Page
{
protected HtmlForm Form1;
private void Page_Load(object sender, System.EventArgs e)
{
// opret et linkliste
SpecialLinkList linklist = new SpecialLinkList();
// smide nogle links ind i den
for(int i=0;i<10;i++)
{
SpecialLink sl = new SpecialLink();
sl.NavigateUrl="
http://www.google.com"; sl.Text = "LINK";
linklist.AddLink(sl);
}
// smid linklisten ind på formen
Form1.Controls.Add(linklist);
// og løb den igennem med en foreach (det er den der kræver IEnumerable)
foreach(SpecialLink link in linklist)
{
Response.Write("We got a SpecialLink<br>");
}
}
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
}
public class SpecialLink : HyperLink
{
public override void RenderBeginTag(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Title, "What a title");
base.RenderBeginTag (writer);
}
public override void RenderEndTag(HtmlTextWriter writer)
{
base.RenderEndTag (writer);
}
}
public class SpecialLinkList : Control, IEnumerable
{
private SpecialLinkCollection _items = new SpecialLinkCollection();
public SpecialLinkCollection Items
{
get{return _items;}
}
public int AddLink(SpecialLink specialLink)
{
return _items.Add(specialLink);
}
protected override void Render(HtmlTextWriter writer)
{
foreach(SpecialLink sl in _items)
{
sl.RenderControl(writer);
writer.WriteFullBeginTag("BR");
}
base.Render (writer);
}
public IEnumerator GetEnumerator()
{
// TODO: Add SpecialLinkList.GetEnumerator implementation
return Items.GetEnumerator();
}
}
public class SpecialLinkCollection : CollectionBase
{
public SpecialLink this[int index]
{
get{return (SpecialLink)List[index];}
set{List[index] = value;}
}
public int Add(SpecialLink value)
{
return List.Add(value);
}
public int IndexOfSpecialLink(SpecialLink value)
{
return(List.IndexOf(value));
}
public void Insert(int index, SpecialLink value )
{
List.Insert(index, value);
}
public void Remove(SpecialLink value)
{
List.Remove(value );
}
public bool Contains(SpecialLink value)
{
return(List.Contains(value));
}
protected override void OnInsert(int index, Object value)
{
if (!(value is SpecialLink))
throw new ArgumentException("value must be of type SpecialLink.", "value" );
}
protected override void OnRemove( int index, Object value )
{
if (!(value is SpecialLink))
throw new ArgumentException( "value must be of type SpecialLink.", "value" );
}
protected override void OnSet( int index, Object oldValue, Object newValue )
{
if (!(newValue is SpecialLink))
throw new ArgumentException( "newValue must be of type SpecialLink.", "newValue" );
}
protected override void OnValidate( Object value )
{
if (!(value is SpecialLink))
throw new ArgumentException( "value must be of type SpecialLink." );
}
}
}