在C#中 ref和out的区别
1个回答
展开全部
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;//此处编译可以通过这就是"协变"
附上截图
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询