C#中泛型類 泛型方法


1,泛型好處:增加類型好處,帶來編碼的方便


常見的泛型:泛型類和泛型方法,泛型委托(自定義委托,常見的泛型委托(Func,Action))


泛型類的規范:public class 類名<T>{類的成員}
T:僅僅是一個占位符,只要符合c#命名規范即可,但一般使用T
T:表示一個普通的數據類型,在使用的時候用實際類型代替
T:泛型類可以在定義中包含多個任意類型參數,參數之間用多個逗號分隔,
例子:public MyGenericClass<T1,T2,T3>{...}

用泛型類做一個簡單的進棧,出棧

public class MyStack<T>
{
private T[] stack;
private int stacPoint;
private int size;

public MyStack(int size)
{

this.size = size;
this.stack = new T[size];
this.stacPoint = -1;
}
public void Push(T item)
{

if (stacPoint >= size)
{
Console.WriteLine("棧空間已滿");
}
else
{
stacPoint++;
this.stack[stacPoint] = item;
}
}
public T Pop()
{

T data = this.stack[stacPoint];
stacPoint--;
return data;
}
}

 

static void Main(string[] args)
{
MyStack<int> stack1 = new MyStack<int>(3);
//入棧
stack1.Push(1);
stack1.Push(2);
stack1.Push(3);
//出棧
Console.WriteLine(stack1.Pop());
Console.WriteLine(stack1.Pop());
Console.WriteLine(stack1.Pop());

Console.ReadKey();
}

 

其他類型也是一樣

2,約束類型的泛型類

//使用關鍵字where
class MyGenericClass2<T1, T2, T3>
where T1:struct //類型必須是值類型
where T2: class//類型必須是引用類型
where T3:new()//類型必須有一個無參數構造方法,且必須放到最后
//除此之外還有多種其他類型
//基類類型,接口類型等。。。
{
public List<T2> ProductList { get; set; }
public T3 Publisher { get; set; }
public MyGenericClass2() {

ProductList = new List<T2>();
Publisher = new T3();
}
public T2 Buy(T1 num) {
//動態類型
dynamic uknow = num;
return ProductList[uknow];
}
}

//根據泛型類的要求設計參數
class Course {

public string CourseName { get; set; }
public int Period { get; set; }
}
class Teacher {

public string Name { get; set; }
public int Count { get; set; }
}

//運行結果

static void Main(string[] args)
{
//實例化泛型類型對象
MyGenericClass2<int, Course,Teacher > MyClass2 = new MyGenericClass2<int, Course, Teacher>();
//給對象實行賦值
MyClass2.Publisher = new Teacher() { Name = "周老師", Count = 20 };
MyClass2.ProductList = new List<Course>() {

new Course(){ CourseName = ".Net-CS+BS高級工程師",Period = 6},
new Course(){ CourseName = ".Net-CS高級工程師",Period = 3},
new Course(){ CourseName = ".Net-BS高級工程師",Period = 3},
};
//調用方法對象
Course Mycourse = MyClass2.Buy(0);
string info = string.Format("我購買的書本有:{0} 時長:{1}個月 老師:{2}",
Mycourse.CourseName,
Mycourse.Period,
MyClass2.Publisher.Name);
Console.WriteLine(info);
Console.ReadKey();
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM