在C#中 ref和out的区别

 我来答
丿夜灬羽灵
2017-08-22 · 超过24用户采纳过TA的回答
知道答主
回答量:68
采纳率:0%
帮助的人:23.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;//此处编译可以通过这就是"协变"

附上截图

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式