【被基础忽悠】c#中类的创建及引用之引用地址问题
public class User{
public string Email {get;set;}
}
public class Order
{
public string No {get;set;}
public User Creator {get;set;}
}
下面我们来看下Order.Creator的创建和赋值问题
Order order = new Order();
User user = order.Creator;
user = new User();
当user创建了新的引用时,order.Creator依然为null
Order order = new Order();
order.Creator = new User();
User user = order.Creator;
user.Email = "a@msn.com";
此时 order.Creator的email却被赋值了
可能大家都疑惑为什么创建这么多临时变量,其实是由于在extension method中遇到的问题
public static void Attach(this User user)
{
user = new User();
}
order.Creator.Attach();
此时 Creator 并没有被赋值
个人认为是 order变没有保存 creator的地址,因为它是null
当user = new User()时,也只是个新的临时变量,所以新值的地址并不会反馈到order中
不过上面的email怎么就被赋值了
怎么才能让 user = new User()后, order.Creator同时被赋值,有办法可以做到吗? --------------------编程问答-------------------- 扩展 Order 的方法
public static void Attach(this Order user)
{
user.Creator = new Test.User();
}
--------------------编程问答-------------------- 下面我们来看下Order.Creator的创建和赋值问题
Order order = new Order();
User user = order.Creator;
user = new User();
当user创建了新的引用时,order.Creator依然为null
User user = order.Creator; user为null 没有引用的..
Order order = new Order();
order.Creator = new User();
User user = order.Creator;
user.Email = "a@msn.com";
User user = order.Creator; 为Order.Creator;
--------------------编程问答-------------------- 引用类型的对象就这样,多个变量指向同一个引用地址的情况下,如果你改变其中一个变量的地址指向,其它变量不会跟着改变的,但如果你改变其中一个变量指向的地址内的值,则所有指向该地址的变量都会跟着改变。 --------------------编程问答-------------------- 看上去楼主是把 运算符“=” 跟 数学上的等号一视同仁了 --------------------编程问答-------------------- up... --------------------编程问答-------------------- null的引用都是相同的,当时表示order.Creator并没有对象,然后你在子过程里面对一个引用指针初始化完成后,并没有对order.Creator重新传递新的指针。
其实也很容易理解,你去图书馆借书,没借到,你买了一本新的那这本新的就是你自己的,如果你把它给图书馆,那么图书馆才有你的这本书。
如果你借到了,那么这本书就是图书馆的,你没有买新的,如果你再买新的,那么图书馆的书还是图书馆的,你的还是你的,是两本,而不是一本。 --------------------编程问答-------------------- 楼主好好搜一下有关值传递和引用传递应该就明白了
补充:.NET技术 , C#