在項目中通過對項目不斷更深的認識
一
class Stack<T>
{
private T[] store;
private int size;
public Stack()
{store = new T[
public void Push(T x)
{store[size++] = x; }
public T Pop()
{return store[
}
二
Stack<int> x = new Stack<int>();
x
所謂泛型
三
C#泛型能力由CLR在運行時支持
四
一輪編譯時
五
如果實例化泛型類型的參數相同
C#泛型類型攜帶有豐富的元數據
C#的泛型采用
六
class C<U
class D: C<string
class E<U
class F<U
class G : C<U
C#除可單獨聲明泛型類型(包括類與結構)外
七
class C<V>{
public V f
public D<V> f
public C(V x) {
this
}
}
泛型類型的成員可以使用泛型類型聲明中的類型參數
八
interface IList<T> {
T[] GetElements();
}
interface IDictionary<K
void Add(K key
}
// 泛型接口的類型參數要麼已實例化
class List<T> : IList<T>
public T[] GetElements() { return null; }
public void Add(int index
}
九
delegate bool Predicate<T>(T value);
class X {
static bool F(int i) {}
static bool G(string s) {}
static void Main() {
Predicate<string> p
Predicate<int> p
}
}
十
支持在委托返回值和參數上應用參數類型
泛型方法簡介
C#泛型機制只支持
C#泛型機制不支持在除方法外的其他成員(包括屬性
十一
public class Finder {
// 泛型方法的聲明
public static int Find<T> ( T[] items
for(int i=
if (items[i]
}
return
}
}
// 泛型方法的調用
int i=Finder
十二
class MyClass {
void F
void F
void F
void F
void F
void F
}
十三
abstract class Base
{
public abstract T F<T
public abstract T G<T>(T t) where T: IComparable;
}
class Derived: Base{
//合法的重寫
public override X F<X
//非法的重寫
public override T G<T>(T t) where T: IComparable {}
}
十四
C#泛型要求對
十五
class A { public void F
class B { public void F
class C<S
where S: A // S繼承自A
where T: B // T繼承自B
{
// 可以在類型為S的變量上調用F
// 可以在類型為T的變量上調用F
}
十六
interface IPrintable { void Print(); }
interface IComparable<T> { int CompareTo(T v);}
interface IKeyProvider<T> { T GetKey(); }
class Dictionary<K
where K: IComparable<K>
where V: IPrintable
{
// 可以在類型為K的變量上調用CompareTo
// 可以在類型為V的變量上調用Print和GetKey
}
十七
class A {
class B {
class C<T>
{
public A() { } }
public B(int i) { } }
}
C<B> c=new C<B>(); //錯誤
where T : new()
//可以在其中使用T t=new T();
?
C<A> c=new C<A>(); //可以
十八
public struct A {
public class B{ ?
class C<T>
where T : struct
{
}
}
// T在這裡面是一個值類型
C<A> c=new C<A>(); //可以
}
C<B> c=new C<B>(); //錯誤
From:http://tw.wingwit.com/Article/program/net/201311/13090.html