关于值类型参数传递和引用类型传递传递以及ref和out关键字用法,真心不是很理解,哪位高手帮忙指点迷津~谢谢
解决方案 »
- 高人来。在线等。数学高手。编程高手。
- 数据绑定问题
- 我用Process要开Notepad.exe,想让它只开一个,如果打开了,就让它的主窗口在桌面最前面激活??
- EXCEL COM组件问题
- 两天了,路过的帮个忙!!!谢谢了啊!!!关于GridView传值的一个问题!!!!!!!!!!
- 用.NET的WinForm如何实现三维的造型
- ******谈谈你自认为做过有一定技术难度的开发******
- C# 通过外网访问内网数据库,WebService已经建好在内网可以使用,求高人指点??
- 做分布式系统的软件,无论是应用程序,ASP.NET都能用!
- 有谁用过Oracle Developer/2000的?
- 没分了见谅啊~~求助linq的group by写法
- 求助:为什么用webbrowser打开tif文件会在新窗口弹出?其他格式没问题
{
static void Foo(TestClass c)
{
c.i = 100;
c.s = "WorldHello";
} static void Foo(out Int32 i)
{
i = 100;
} static void Foo(String s)
{
s = "WorldHello";
} static void Foo(ref String s)
{
s = "WorldHello";
} static void Main(string[] args)
{
// TestClass本来就是引用了
TestClass c = new TestClass();
Foo(c);
Console.WriteLine(String.Format("{0},{1}", c.i, c.s)); // out进入函数时不用先给i赋值,但离开函数时必须给i赋值
Int32 i;
Foo(out i);
Console.WriteLine(i); // 虽然String是引用类型,但String是不可变的,所以仍然输出HelloWorld
String s1 = "HelloWorld";
Foo(s1);
Console.WriteLine(s1); // ref进入函数时必须给s2赋值,引用再引用?,最后输入出WorldHello
String s2 ="HelloWorld";
Foo(ref s2);
Console.WriteLine(s2); // 属性不是变量,是方法,属性不能ref out
Foo(out c.ii);
Foo(ref c.ss); Console.ReadKey();
}
}public class TestClass
{
public Int32 i = 200;
public String s = "HelloWorld"; public Int32 ii
{
get { return i; }
set { ii = value; }
} public String ss
{
get { return s; }
set { s = value; }
}
}
说得好,如果你用ref修饰一个对象引用的参数,那么函数可以将这个对象引用指向另一个对象。而如果你不是用ref,那么你可以修改这个对象的状态——这导致实参的那个对象状态的更改,但是当你将这个引用指向另一个对象的时候,实参指向的对象不会修改。