首先复习一下继承的作用,比如B继承A,那么B就可以使用A中的public,Protected方法,成员属性。
c#中所有的类型,如int,string等都继承object类型。
object是引用类型,int,string是值类型。
引用类型转值类型会影响效率,所以不推荐使用object,此时泛型更加合适。
1.我们的GetRandomValueFrom的目前代码如下:(这是用object类型的情况)
public static object GetRandomValueFrom(params object [] values)
{
return values[Random.Range(0, values.Length)];
}
注意,object前面需要加上params,不然不能转为int,float类型
测试代码如下:(这是用的object转int/string/float,引用类型转的值类型,影响效率)
var intRandomValue = (int)GetRandomValueFrom(new int[] { 1, 2, 3 });
var stringRandomValue = (string ) GetRandomValueFrom(new string[] { "asd", "asdsdf" });
var floatRandomValue =(float ) GetRandomValueFrom(new float[] { 1.1f, 2.2f });
2.我们的GetRandomValueFrom的目前代码如下:(这是用泛型的情况)
public static T GetRandomValueFrom<T>( T[] values)
{
return values[Random.Range(0, values.Length)];
}
泛型的测试代码如下:(代码感觉简洁了许多,因为并不用强转)
var intRandomValue = GetRandomValueFrom(new int[] { 1, 2, 3 });
var stringRandomValue = GetRandomValueFrom(new string[] { "asd", "asdsdf" });
var floatRandomValue = GetRandomValueFrom(new float[] { 1.1f, 2.2f });
3.params参数:即可变参数, 可以传任意个数的参数
public static T GetRandomValueFrom<T>(params T[] values)
{
return values[Random.Range(0, values.Length)];
}
测试代码:(相比上面,没有了new int[]的步骤了,代码更简洁)
var intRandomValue = GetRandomValueFrom(1, 2, 3 );
var stringRandomValue = GetRandomValueFrom("asd", "asdsdf" );
var floatRandomValue = GetRandomValueFrom( 1.1f, 2.2f );