C# out ref使用区别

out ref都是引用地址的,修改参数变量会真实的修改

public void Test(ref int a,out int b)

{
b=10;//这里必须给b赋值否则会报错
}
//参数用ref修饰那么传入的之前就要赋值
//out则不需要赋值,但是在函数(方法)里必须赋值,比如此处可以这样调用
int a=10,b;
Test(ref a,out b);
Console.WriteLine("a={0},b={1}",a,b);
//这个打印出来b=10
//还有out在泛型类/接口里边可以使类/接口支持"协变"
//所谓协变 类似 “里氏替换原则” (所有要父类的地方子类都可以冒名顶替)
//比如:
public void Test2(object obj){

}
//调用的时候可以这样
Test2(10);
Test2("string");
//我们会发现这个方法什么类型的参数都可以传,那是因为所有的类默认继承object类

//协变
public interface ICar<T> { }//不支持协变
ICar<object> objCar=null;
ICar<string> strCar=null;
objCar=strCar;//此处编译器会出现异常
//因为ICar<object> 和ICar<string> 并不是一个类型,虽然它们的<T>具有着父子关系,但是这并不能影响它们的类型
public interface ICar1<out T> { }//支持协变
ICar1<object> objCar=null;
ICar1<string> strCar=null;
objCar=strCar;//此处编译可以通过这就是"协变"

附上截图

声明:本站内容来源于原创和互联网,尊重作者版权,转载请注明来源网址,欢迎收藏,谢谢!