class Program
{
private string a; private int b; static void Main(string[] args)
{
Program p1 = new Program();
p1.a = "p1a";
p1.b = 1;
Program p2 = new Program();
p2.a = "p2a";
p2.b = 2;
new Program().ChangeA(p1, p2);
Console.WriteLine(p1.a + p1.b); new Program().ChangeB(p1, p2);
Console.WriteLine(p1.a + p1.b);
} private void ChangeA(Program p1, Program p2)
{
p1 = p2;
} private void ChangeB(Program p1, Program p2)
{
p1.a = p2.a;
p1.b = p2.b;
}
无论参数是基本类型还是值类型,都不会改变原来的值,这是为什么?
调用ChangeB方法又可以改变对象中属性的值,这又是为什么?
解决方案 »
- 异常详细信息: System.Configuration.Provider.ProviderException: 未启用角色管理器功能。
- C#
- 还是正则表达式的问题
- <input/>控件中哪一个属性可以将空间隐藏?
- TreeView中的CheckBox设置
- c#怎样制作无窗体的控件,就想工具箱中的TIMER控件,直接从工具箱中拖出,在编译环境下放会有显示,但并无实际的窗体,这样的空间怎么做?
- 请教:水晶报表问题!!
- 在c#中通过什么样的语句可以统计出access表中的记录数 ?
- 用C#编写聊天软件时,服务器端怎么获得特定的Socket句柄?
- 关于分辨率的问题
- C# winfrom 连接MySQL 读取数据超时问题
- 继续解决
创建了一个新的实例,而不是在原来的实例上运行的
只是一个进行数据交换的方法而已
那么第二个方法
ChangeB(p1, p2);这个为什么可以改变?
如果使用ref关键字,则无论是引用类型还是值类型,其内部属性及对象本身都可以改变。
多看看MSDN...
传递参数(C# 编程指南)
这两个方法都是"按值传递",同时也是"传递引用类型参数",所以p1=p2无效,不能改变P1的指针。
但p1.a = p2.a;有效,没改变指针,但可以改变其中的属性,改变的是P1指针空间中的属性值。
{
p1 = p2;
} private void ChangeB(ref Program p1,ref Program p2)
{
p1.a = p2.a;
p1.b = p2.b;
}