程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 本人剛開始學c#,剛才在網上找了幾個構件c#語言編譯器,也許對剛剛入門的各位有點幫助,同時也希望同時學習c#的個人能把你們找到的一些資料公布出來。

本人剛開始學c#,剛才在網上找了幾個構件c#語言編譯器,也許對剛剛入門的各位有點幫助,同時也希望同時學習c#的個人能把你們找到的一些資料公布出來。

編輯:.NET實例教程

//本文參閱 CSDN ccat 的 MarchLibrary 修改
// C# 1.x 實現 "強類型元素唯一的 ArrayList"
using System;
using System.Collections;

/// 任何元素的 Type 都應當等於指定的類型或為指定類型的子類。
/// 對於值類型,最好先行裝箱再使用。
/// 作為 C# 1.x 語言實現泛型功能之前的代用品(運行時錯誤)。

public class StrongTypeUniqueArrayList : ArrayList
{
private Type _type;
/// <summary>
/// 禁止默認構造。
/// </summary>
private StrongTypeUniqueArrayList()
{
}
/// <summary>
/// 在容器初始化時指定其元素類型
/// </summary>
/// <param name="ElementType">ArrayList (元素)類型</param>
public StrongTypeUniqueArrayList(System.Type ElementType)
{
_type = ElementType;
}
/// <summary>
/// 不能再更改其內部元素類型。
/// </summary>
public Type Type
{
get
{
return _type;
}
}
private bool IsMatchType(Type eType)
{
return (eType == _type)|(eType.IsSubclassOf(_type));
}


public override object this[int index]
{
set
{
if (IsMatchType(value.GetType()))
{
if (base.Contains(value))
{
if (base.IndexOf(value) == index)
{
base[index] = value;
}
else
{
throw new ArgumentException(value.ToString() + " 元素重復","value");
}
}
else
{
base[index] = value;
}
}
else
{
throw new ArgumentException(value.GetType().FullName + " 類型錯誤", "value");
}
}
}

public override int Add(object value)
{
if (!base.Contains(value) && IsMatchType(value.GetType()))
{
base.Add(value);
return 1;
}
else
{
throw new ArgumentException(value.GetType().FullName + " 類型錯誤 或 " + value.ToString() + " 元素重復", "value");
//return -1;
}
}
public override void Insert(int index, object value)
{
if (!base.Contains(value) && IsMatchType(value.GetType()))
{
base.Insert(index,value);
}
else
{
throw new ArgumentException(value.GetType().FullName + " 類型錯誤 或 " + value.ToString() + " 元素重復", "value");
}
}

public override void InsertRange(int index, ICollection c)
{
System.Collections.IEnumerator IE = c.GetEnumerator();
while (IE.MoveNext())
{
if (base.Contains(ie.Current) || !IsMatchType(IE.Current.GetType()))
{
throw new ArgumentException(ie.Current.GetType().FullName + " 類型錯誤 或 " + IE.Current.ToString() + " 元素重復", "c");
}
}
base.InsertRange(index,c);
}
public override void SetRange(int index, ICollection c)
{
System.Collections.IEnumerator IE = c.GetEnumerator();
int i = 0;
while (IE.MoveNext())
{
if (IsMatchType(IE.Current.GetType()))
{
if (base.Contains(ie.Current) && base.IndexOf(IE.Current) != i)
{
throw new ArgumentException(IE.Current.ToString() + " 元素重復","c");
}
}
else
{
throw new ArgumentException(IE.Current.GetType().FullName + " 類型錯誤", "c");
}
i++;
}
base.SetRange(index,c);
}
public override void AddRange(ICollection c)
{
System.Collections.IEnumerator IE = c.GetEnumerator();
while (IE.MoveNext())
{
if (base.Contains(ie.Current) || !IsMatchType(IE.Current.GetType()))
{
throw new ArgumentException(ie.Current.GetType().FullName + " 類型錯誤 或 " + IE.Current.ToString() + " 元素重復", "c");
}
}
base.AddRange(c);
}
}
//Test:
public class Class1
{
private static int i = 0;
public string xxx = "test";
public Class1()
{
System.Console.WriteLine(i++);
}
static void Main(string[] args)
{
System.Console.WriteLine("Hello World");
Class1 c1 = new Class1();
Class1 c2 = new Class1();
Class1 c3 = new Class1();
Class1 c4 = new Class1();
//StrongTypeUniqueArrayList x = new StrongTypeUniqueArrayList(typeof(Class1));
StrongTypeUniqueArrayList x = new StrongTypeUniqueArrayList(System.Type.GetType("Class1"));
System.Console.WriteLine(x.Type);
x.Add(c1);
x.Add(c2);
x.Add(c3);
x.Insert(0,c4);
//x.Add(new Class1());
//x.Add(c1);
// x[2]= new Object();
//x.Insert(2,new Object()); //類型錯誤
//x.Insert(2,c2);
// x.Add(c2); //元素重復
}
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved