本文仅作学习笔记与交流,不作任何商业用途,作者能力有限,如有不足还请斧正
1.什么是泛型
泛型(Generics)是C#中的一个强大特性,允许你编写可以适用于多种数据类型的可重用代码,而不需要重复编写类或方法,泛型提供了类型参数化的能力,使得我们可以在编写代码时延迟确定具体的数据类型
说白了,泛型就是就是偷懒用的,或者说是对数据类型不定的情况下,占位用的
2.泛型广泛用于各种地方
只需要学会两个符号即可
<T>: < > 代表泛型符号,T代表占位符
T: 占位符,表示未定数据类型
下面举例说明:
2.1泛型函数
这是一个参数为泛型的泛型函数
MyFunction<int>(114514);
//泛型函数
static void MyFunction<T>(T t )
{
Console.WriteLine( t );
}
使用时别忘了在<>中填写数据类型,这样给出的数据类型就会交给T,而函数的参数就会变为int类型,图解:
2.2泛型类
比较常见的使用方式就是泛型类的<T>和字段变量一直,不然需要合理的强制转换
当然构造函数传入的一定是和创建类时,和<T>一样的类型
Computer<string> computer = new Computer<string>("泛型数据的任意性");
Console.WriteLine(computer.Value);
public class Computer<T> {
private T value;
public T Value { get { return value; } }
public Computer(T value)
{
this.value = value;
}
}
2.3泛型接口
我的目标是给出一个泛型接口,通过子类去实现其中的属性和方法
通过子类的方法将属性的set封装一次,并将属性get出来
泛型接口
public interface Computer<T> { protected T Value { get; } protected T MyFunction(T value) { return value; } }
继承泛型接口
public class NoteBook : Computer<string> { public string Value{get;private set; } public string MyFunction(string s) { Value = s; return Value; } }
实现:
NoteBook noteBook = new NoteBook(); noteBook.MyFunction("泛型接口"); Console.WriteLine(noteBook.Value);
总览:
NoteBook noteBook = new NoteBook(); noteBook.MyFunction("泛型接口"); Console.WriteLine(noteBook.Value); public interface Computer<T> { protected T Value { get; } protected T MyFunction(T value) { return value; } } public class NoteBook : Computer<string> { public string Value{get;private set; } public string MyFunction(string s) { Value = s; return Value; } }
图解:
2.4泛型委托
我就以上面的MyFunction方法举例,用Func委托(一个c#提供好的,有可以参,必须有返回值的委托函数)来订阅该方法:C# 委托-CSDN博客
public Func<string,string> func;
public NoteBook(string s)
{
func += MyFunction;
func.Invoke(s);
}