蓝鸥Unity开发基础二——课时21 泛型
本节课我们来学习C#中的泛型,泛型是一个特殊的类型,它可以最大限度的重用我们的代码!
推荐视频讲师博客:http://11165165.blog.51cto.com/
使用泛型能够最大限度的重用代码,保护类型安全,提高性能
泛型成员因为类型的不确定性,不能使用算术运算符,比较运算符
类型参数可以有多个,可以是编译器能够识别的任何类型
类型参数的名字不能够随便起,不能重名
一、数组类Array
using System;
namespace Lesson_21
{
//数组类Array
public class Array{
public int Count{
get{
return _count;
}
}
public void Add(int value){
_arr[_count]=value;
_count++;
}
public void log(){
//当前数组中包含3个元素:(13,76,92)
string str = "当前数组中包含"+Count+"个元素:(";
for (int i = 0; i < Count; i++) {
str+=_arr[i];
if (i<Count-1) {
str +=", ";
}
}
str += ")";
}
public Array(){
_arr=new int[100];
}
private int[] _arr;
private int _count=0;
}
class MainClass
{
public static void Main (string[] args)
{
Array arr = new Array ();
arr.log ();
arr.Add(13);
arr.log ();
arr.Add(76);
arr.log ();
arr.Add(92);
arr.log ();
}
}
}
二、索引器
using System;
namespace Lesson_21
{
//数组类Array
public class Array{
//索引器
public int this [int index] {
set{
_arr [index] = value;
}
get{
return _arr[index];
}
}
public int Count{
get{
return _count;
}
}
public void Add(int value){
_arr[_count]=value;
_count++;
}
public void log(){
//当前数组中包含3个元素:(13,76,92)
string str = "当前数组中包含"+Count+"个元素:(";
for (int i = 0; i < Count; i++) {
str+=_arr[i];
if (i<Count-1) {
str +=", ";
}
}
str += ")";
Console.WriteLine (str);
}
public Array(){
_arr=new int[100];
}
private int[] _arr;
private int _count=0;
}
class MainClass
{
public static void Main (string[] args)
{
Array arr = new Array ();
arr.log ();
arr.Add(13);
arr.log ();
arr.Add(76);
arr.log ();
arr.Add(92);
arr.log ();
arr [0] = 26;
arr.log ();
Console.WriteLine ("arr[1]="+arr[1]);
}
}
}
三、数组中只能存整数,无法存小数的。我们在初始化和参数的时候,都确定了int类型。但是在使用的过程中,我们肯定有存其他类型的,那么我们怎么办?一种方式就是我们复制代码,修改类型,但是这种方式很麻烦。是否有更简便的方式。
大家不要忘记我们这节课的主题——泛型,那么我们就看一下泛型是如何使用的?
using System;
namespace Lesson_21
{
//使用泛型
//数组类Array
//泛型类——需要在类名后加上泛型类型
//定义的时候需要使用T泛型类型表示任意一种数据类型
public class Array<T>{
//索引器
public T this [int index] {
set{
_arr [index] = value;
}
get{
return _arr[index];
}
}
public int Count{
get{
return _count;
}
}
public void Add(T value){
_arr[_count]=value;
_count++;
}
public void log(){
//当前数组中包含3个元素:(13,76,92)
string str = "当前数组中包含"+Count+"个元素:(";
for (int i = 0; i < Count; i++) {
str+=_arr[i];
if (i<Count-1) {
str +=", ";
}
}
str += ")";
Console.WriteLine (str);
}
public Array(){
_arr=new T[100];
}
private T[] _arr;
private int _count=0;
}
class MainClass
{
public static void Main (string[] args)
{
//泛型当具体使用的时候,才需要实际的类型
Array<int> arr=new Array<int>();
arr.log ();
arr.Add (23);
arr.log ();
arr.Add (74);
arr.log ();
arr[1] =12;
arr.log ();
}
}
}
修改一:存浮点类型
class MainClass
{
public static void Main (string[] args)
{
//泛型当具体使用的时候,才需要实际的类型
Array<float> arr=new Array<float>();
arr.log ();
arr.Add (23.5f);
arr.log ();
arr.Add (74.12f);
arr.log ();
arr[1] =12.99f;
arr.log ();
}
修改二:字符串类型
class MainClass
{
public static void Main (string[] args)
{
//泛型当具体使用的时候,才需要实际的类型
Array<string> arr=new Array<string>();
arr.log ();
arr.Add ("老王");
arr.log ();
arr.Add("老张");
arr.log ();
arr[1] ="赵四";
arr.log ();
}
课堂源代码:
using System;
namespace Lesson_21
{
//使用泛型
//数组类Array
//泛型类——需要在类名后加上泛型类型
//定义的时候需要使用T泛型类型表示任意一种数据类型
//1、使用泛型能够提高代码重用
//2、使用泛型是,由于类型不确定,所以我们不能使用算术运算符
// public class Math<T>{
// public T Max(T num1,T num2){
// return num1 > num2 ? num1 : num2;
// }
// }
//T ——type
//S/U/V——第2、3、4种类型
//K/V——key/value
//N——number
public class Array<T,S,U,V>{
//索引器
public T this [int index] {
set{
_arr [index] = value;
}
get{
return _arr[index];
}
}
public int Count{
get{
return _count;
}
}
public void Add(T value){
_arr[_count]=value;
_count++;
}
public void log(){
//当前数组中包含3个元素:(13,76,92)
string str = "当前数组中包含"+Count+"个元素:(";
for (int i = 0; i < Count; i++) {
str+=_arr[i];
if (i<Count-1) {
str +=", ";
}
}
str += ")";
Console.WriteLine (str);
}
public Array(){
_arr=new T[100];
}
private T[] _arr;
private int _count=0;
}
class MainClass
{
public static void Main (string[] args)
{
//泛型当具体使用的时候,才需要实际的类型
Array<string> arr=new Array<string>();
arr.log ();
arr.Add ("老王");
arr.log ();
arr.Add("老张");
arr.log ();
arr[1] ="赵四";
arr.log ();
}
}
}
原文地址:http://11131960.blog.51cto.com/11121960/1846648