结果就是1,2 啊
任何类型都可以转换成object类型,包括简单类型
任何类型都可以转换成object类型,包括简单类型
解决方案 »
- 关于Winfom中的DataGridView显示列的问题
- 我想问各位大侠一个实现方法
- [C#] 关于线程的使用问题。
- 谁能给出我一个Remoting做的聊天室代码?winform的
- TextBox 多行 如何限定输入字数?
- 如何在一个Trust Level=Medium的Web App中引用一个PInvoke的DLL?高手来帮忙!!
- C#写的Windows服务怎么注册和启动啊。
- pictureBox里图片颜色改变了???怎么办???
- 水晶报表发布问题.找不到 keycode2.dll or invalid keycode
- VS7安装后 怎么无法使用CSC xxx.cs 这样的命令
- 怎么在父类中调用已经被子类重载的原先的方法,内详
- 出于安全原因,此 XML 文档中禁止了 DTD???
{
obj = 1;
object obj2= MyTest2(obj);
Console.WriteLine(obj.ToString());
Console.WriteLine(obj2.ToString()); }
public object MyTest2(object obj)
{
obj=2;
return obj;
}obj=2; 这步其实是obj=new Object(2);//虽然不能这样写,但意义就是这样..它会在堆上新建1片地方保存2这个值..obj存的是这个实例的引用..你仔细想象也明白啊..public class test{
public string name{get;set;}
}test t1=new test(){name="123"};
test t2=t1;
t2.name="456";这时2个的name都一样..而你是obj=2;你自己体会下吧
知道你的疑问在于obj1为什么还是1?
public object MyTest2(object obj)
{
obj=2;
return obj;
}上面这个方法,改变了局部变量的值,但传进来的参数,实质只是obj1的一个引用复本,obj=2; 只是对这个引用复本重新赋值了,而obj1本身变不会有任何变化(无论是引用类型还是值类型)
不是在赋值时新建,而是object obj2= MyTest2(obj)调用的时候,传入的obj就只是obj1的一个引用复本
为了描述方便,MyTest1中的obj当作obj1
obj和obj1引用的都是1(装箱了),在MyTest2内部,那个局部变量obj就跟obj1没有一点关系了
我只补充一句:
string也是引用类型,object跟string的实现是差不多的,明白了么?
如果定义
int[ ] a=new int[4];
那么在函数里修改a[0]的时候,改的是被引用的值,而不是a本身的指向而string和object在重新赋值的时候,指向也变了
//所谓引用类型=类类型=接口类型=数组类型=委托类型
//引用类型的使用
class Program
{
class C //创建一个类C
{
public int Value; //声明一个公共int类型的变量Value
}
static void Main(string[] args)
{
int v1 = 0; //声明一个int类型的变量v1,并初始化为0
int v2 = v1; //声明一个int类型的变量v2,并将v1赋值给v2
v2 = 927; //重新将变量v2赋值为927
C r1 = new C(); //使用new关键字创建引用对象
C r2 = r1; //使r1等于r2
r2.Value = 112; //设置变量r2的Value值
Console.WriteLine("Values:{0},{1}", v1, v2); //输出变量v1和v2
Console.WriteLine("Refs:{0},{1}", r1.Value, r2.Value); //输出引用类型对象的Value值
Console.ReadLine();
}
}