out关键字一般运用在什么地方比较好呢?
网上说“当希望方法返回多个值时,声明 out 方法非常有用。”,请问怎么个有用法??能举例子吗
感觉有了ref就足够了吧
别发ref和out的区别 我知道的 就是不知道在什么情况下去使用
举些例子 能凸显out的好处
100分 甩了
网上说“当希望方法返回多个值时,声明 out 方法非常有用。”,请问怎么个有用法??能举例子吗
感觉有了ref就足够了吧
别发ref和out的区别 我知道的 就是不知道在什么情况下去使用
举些例子 能凸显out的好处
100分 甩了
static void Main()
{
int[] ary = { 12, 13, 103, 10003 };
int numLargerThan10,numLargerThan100,numLargerThan1000 ;
Proc(ary, out numLargerThan10, out numLargerThan100, out numLargerThan1000);
Console.WriteLine("有{0}个数大于10,有{1}个数大于100,有{2}个数大于1000",numLargerThan10,numLargerThan100,numLargerThan1000);
Console.Read();
} static void Proc(int[] ary, out int numLargerThan10, out int numLargerThan100, out int numLargerThan1000)
{
numLargerThan10 = 0;
numLargerThan100 = 0;
numLargerThan1000 = 0;
foreach (var a in ary)
{
if (a > 1000)
numLargerThan1000++;
else if (a > 100)
numLargerThan100++;
else if (a > 10)
numLargerThan10++;
}
}
out思路:
1、顾名思义是输出;
2、你在程序段中定义的变量;如:var1,var2,var3
3、在你的过程中指定输出变量以供使用,如pout(out var1,out var2,out var3)
我觉得两个差不多,out能做的ref也能做...
{
}在这个函数中, 检测方法的返回值为成功或失败, 但失败的原因有多种, 可以把失败的原因作为 msg 传出。
这样,当返回值为失败的时候,你可以从msg这个参数中获得失败的原因。但是,这个失败的原因仅存在于这个检测方法内部。
所以将其参数改为 ref ,试图从外部初始化该参数传入这个检测方法, 显然是不合适的。
{
//使用out后必须对变量赋值
public void TestOut(out int x, out int y)
{
x = 1;
y = 2;
}
//此时传进来的值分别为x1:10,y1:11,输出之后的x1的值为2
public void TestRef(ref int x, ref int y)
{
//引用剪剪那句话传进来的是猪,出来的可能是头牛(很精辟!)
x = 2;
}
static void Main(string[] args)
{
int x;
int y;
Program P1 = new Program();
P1.TestOut(out x,out y);
Console.WriteLine("x={0},y={1}", x, y);
//在使用之前ref必须对变量赋值
int x1 = 10;
int Y1 = 11;
P1.TestRef(ref x1,ref Y1);
Console.WriteLine("x1={0},y1={1}", x1, Y1);
}
}
什么时候使用? 如你所查 “当希望方法返回多个值时,声明 out 方法非常有用”eg:
public static void Setting(out Int32 i, out Int32 j, out Int32 k)
{
i = 1;
j = 2;
k = 3;
}
static void Main(string[] args)
{ Int32 i, j, k;
Setting(out i,out j, out k); Console.WriteLine(i);
Console.WriteLine(j);
Console.WriteLine(k);
}如果使用ref , 调用Setting之前,i,j,k要赋值
out 关键字会导致参数通过引用来传递。 ref 要求变量必须在传递之前进行初始化。若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。
ref 和 out 在运行时的处理方式不同
本质上没有区别
class TestApp
{
static void outTest(out int x, out int y)
{//离开这个函数前,必须对x和y赋值,否则会报错。
//y = x;
//上面这行会报错,因为使用了out后,x和y都清空了,需要重新赋值,即使调用函数前赋过值也不行
x = 1;
y = 2;
}
static void refTest(ref int x, ref int y)
{
x = 1;
y = x;
}
public static void Main()
{
//out test
int a,b;
//out使用前,变量可以不赋值
outTest(out a, out b);
Console.WriteLine("a=;b=",a,b);
int c=11,d=22;
outTest(out c, out d);
Console.WriteLine("c=;d=",c,d); //ref test
int m,n;
//refTest(ref m, ref n);
//上面这行会出错,ref使用前,变量必须赋值 int o=11,p=22;
refTest(ref o, ref p);
Console.WriteLine("o=;p=",o,p);
}
}
复制粘贴的 仅供参考
if(Int32.TryParse(Request.Params["DirID"].ToString(),out nDirID) == false)
{
return;
}
//这不算优点...?
bool Get(out Msg msg) //Msg 是一个class
{
try
{
msg=new Msg();
}
catch(Exception)
{
return false;
}
return true;
}
调用
Msg m;
Get(m); //m初始化了
只是个例子 没多大意义 不过C++中常用类似的这种方法 来获取变量指针(指针生产器)
int num = 0;Int32.TryParse(str,out num);Console.WriteLine(num);