标签:pre class 接口 val main new style ons turn
泛型方法能够进行类型推断,泛型类型不能。
class GenericTest
{
public T Self<T>(T a)
{
return a;
}
}
static void Main(string[] args)
{
GenericTest tester = new GenericTest();
//指定类型
Console.WriteLine(tester.Self<int>(9));
//类型推断
Console.WriteLine(tester.Self(9.1F));
Console.ReadKey();
}
class GenericTest<T>
{
private T value;
public GenericTest(T value)
{
this.value = value;
}
public T Get()
{
return value;
}
}
可以在定义泛型类型和泛型方法的时候指定类型约束,有4种约束。
用于确保使用的类型实参是引用类型的,必须是类型参数指定的第一个约束
struct Bike<T> where T : class
{
public void Load<K>(K goods) where K : class
{
}
}
class Car<T> where T : class
{
public void Load<K>(K goods) where K : class
{
}
}
确保使用的类型实参是值类型
class Train<T> where T : struct
{
public void Load<K>(K goods) where K : struct
{
}
}
确保类型实参有一个可用于创建实例的无参构造函数,必须是类型参数的最后一个约束,所有值类型实参都满足约束。
class Airplane<T> where T : new()
{
public void Load<K>(K goods) where K : new()
{
}
}
确保类型实参可以隐式转换为指定的类型
class Ship<T> where T : Exception
{
}
// 可以指定多个接口,但只能指定一个类
class Boat<T> where T : Exception, ICollection<T>, IDisposable
{
}
对4种约束的组合
class Tank<T> where T : class, IComparable, new()
{
}
class Misslie<T, K> where T : class where K : new()
{
}
标签:pre class 接口 val main new style ons turn
原文地址:https://www.cnblogs.com/love-me-love-my-code/p/10434760.html