今天面了个试,结果过程和之前的面试完全不一样,没要求写算法,只问了些基础的东西,看来这家公司并不是真心想招人,大概只是打着招人的幌子探测人力市场动态的吧。。。但是即使是如此水的面试,自己也想扇自己一个嘴巴,早上瞄了一眼的概念没想到真遇到了,当然也每答对,因为根本就没记住,再根本的原因就是没用过,不理解。所以今天就把这两东西整理一下吧。。。
C#的ref和out
ref和out传递的都是变量的引用,修改引用的值可以达到修改变量的值的目的,所以使用这两个参数可以让函数返回多个参数。
不同:
ref要求变量在传递之前必须初始化,而out必须在方法中进行初始化,因为out在进入方法时C#会清空一切它的引用和指向。
out适用于需要返回多个值的地方,ref适用于需要被调用的方法修改调用者引用的时候
比如:
void Main()
{
string s = "Stupid Bird"; //如果这句改为 string s; 则会报错
Test(ref s);
Console.WriteLine(s);
}
void Test(ref string str)
{
str = "Silly Bird";
}
void Main()
{
string s = "Stupid bird";
Test(out s);
}
void Test(out string s)
{
s = "Silly bird"; //如果把这句去掉则会报错
Console.WriteLine(s);
}
所以用网上总结的一句话概括这两个变量为:
ref有进有出,out只出不进。
另外,虽然两个关键字运行的时候处理方式不同,但是编译的时候处理方式相同,所以两个同名函数一个用ref,一个用out,这两个函数编译器会认为是一样的而不是重载过的,会报错。但是如果一个不带ref或out关键字,一个带ref或out关键字则可认为是重载函数。
Test(ref int n);
Test(out int n); //写在一个类里会报错
Test(int n);
Test(ref int n); //可通过
发现如此水的题又错了一道,暴风哭泣/(ㄒoㄒ)/~~
Unity中继承Monobehaviour的类的Start函数是不能继承的,因为它是私有的。所以即使B类继承A类,只将B挂在场景物体上,在执行的时候A中的Start不会被执行。非要执行A中的start,要在B中的Start中调用 base.Start()
/(ㄒoㄒ)//(ㄒoㄒ)//(ㄒoㄒ)//(ㄒoㄒ)//(ㄒoㄒ)/~~
7111

被折叠的 条评论
为什么被折叠?



