目录
一.C#中的泛型(Generic)
1.泛型简介
泛型(Generic)是C#中的独特语法之一,泛型允许使用者在类或方法中只定义对数据类型和元素的处理流程和规范,而在使用时才确定数据类型-----简单而言,泛型允许使用者在编写类和方法时不用指定输入和处理的数据类型而是可以在使用这些类和方法时自定义.
举例来说,函数或者类可以理解成一本操作手册,编译器可以理解成看操作手册的员工,被操作的物件类型为员工处理的物品类型.
原来我们的操作手册如下,我们的员工(编译器)也只能执行这种指定物品类型手册
开头:拿到的是木头 流程:1.竖着劈木头一刀2.横着锯开木头
在使用泛型后,我们简写操作手册如下
开头:拿到一种东西 流程:1.竖着劈这种东西一刀2.横着锯开这种东西 注解:这种东西是xxx
当员工遇到特定物品时,我们临时把这种xxx改成员工处理的物品类型,这样我们只要打印很多份简写操作手册,在应用时修改之后的xxx就能让我们的员工看懂手册而不用准备很多种不同的有着特定类型的手册.
2.泛型代码样例
以下代码展示了如何使用泛型来用同样的类的方法来处理自定义的不同数据类型的数据.
using System;
public class TestGenericArray<MyType>
{
private MyType[] array;
//TestGenericArray类构造函数
public TestGenericArray(int size)
{
array = new MyType[size+1];
}
//修改数组内容方法
public void SetContent(int num,MyType element)
{
array[num] = element;
}
//读取数组内容方法
public MyType ReadContent(int num)
{
return array[num];
}
}
class Test
{
static void Main(string[] args)
{ //初始化两个不同处理数据类型的TestGenericArray,处理的数据类型分别为int和char
TestGenericArray<int> int_array = new TestGenericArray<int>(3);
TestGenericArray<char> char_array = new TestGenericArray<char>(3);
//赋值
//int_array 1,2,3
for(int i=1; i<=3; i++)
{
int_array.SetContent(i, i);
}
//char_array a,b,c
char_array.SetContent(1, 'a');
char_array.SetContent(2, 'b');
char_array.SetContent(3, 'c');
Console.Write("int_array:");
for (int i = 1; i <= 3; i++)
{
Console.Write(int_array.ReadContent(i));
}
Console.Write("\nchar_array:");
for (int i = 1; i <= 3; i++)
{
Console.Write(char_array.ReadContent(i));
}
Console.WriteLine();
Console.ReadKey();
}
}
以下为代码运行结果:
int_array:123
char_array:abc
3.泛型使用总结
相比于如下传统的类或函数定义,泛型不需要在编写时确定数据类型而是根据需求来确定使用的数据类型,可以使得类与方法的编写更加的便捷,减少代码量与维护成本,同时可以更加方便的统一管理不同数据类型的处理方法.
class TraditionalArray
{
private int[] array;
public TraditionalArray(int size)
{
array = new int[size + 1];
}
}
二.单例模式(Singleton)
1.单例模式简介
单例模式,是一种常用软件模式,在应用这种模式时,单例对象的类必须保证只有一个实例存在.
这样可以便于其他的类来访问单例对象的类.
举例来说,单例模式可以理解为一个国家具有中央银行性质的银行只能建造一所,而如果其他地方建造这所银行时都不会被批准,这样全国所有到了中央银行的人都知道自己在总行,而不用担心自己走错进了分行,这使得对总行的访问变得方便快捷.
2.单例模式样例
public class Singleton
{
private static Singleton instance;
//构造函数
private Singleton() { }
public static Singleton Instance
{
//如果该类没有实例存在就初始化一个,否则返回原来的实例
//这样可以保证全局该类只有一个实例存在
get
{
if (instance == null)
instance = new Singleton();
return instance;
}
}
//以下为处理方法,可以理解为中央银行对不同客户的处理
}
3.单例模式的适用场景与优点
单例模式适用于一个程序中存在地位如同中央银行,功能为统一储存并且处理其他类或函数的数据的类.当这种情况下,使用单例模式可以方便的通过修改单例模式的类来统一管理其他的类和函数.