【发布时间】:2014-01-21 13:19:19
【问题描述】:
不确定我能否以人们容易理解的方式提出这个问题,所以让我们举一个 cool 营销示例:
public class Part
{
public MemberType member;
...
}
public class Product
{
public Part part1;
...
}
...
Product product = new Product();
我需要修改公共product的part1。所以,自然的方法是写这样的:
product.part1 = new Part();
现在,一种算法(假设是一种搜索算法)将遍历 product 对象并将 part1 识别为有趣的部分并返回对它的引用:
Part Search(Product product)
{
Part part = null;
...
part = product.part1;
...
return part;
}
...
interesting_part = Search(product);
我们可以通过interesting_part 来改变product 对象
interesting_part.member = whatever;
现在,问题:在 c/c++ 中,如果 Product.part1 是指向 Part 的指针并且 Search 返回此指针的地址,我们可以通过分配新值来替换 part1到这个地址。 AFAIK 这对于 c# 参考是不可能的:
interesting_part = new Part();
只是创建新对象并将其引用复制到interresting_part,但在不知道成员父(product 对象)的情况下,我们无法修改(product.part1)引用,只能修改其内容。我们需要二级参考。
是否有类似“ref reference”类型的东西可以接受引用地址?在这种假设的情况下,搜索将返回 ref Part 并分配给这样的值会用新的对象替换引用的对象.
谢谢。
【问题讨论】:
-
你的
Search返回一个引用,而不是一个“对象”本身。 -
您可以将引用包装在一个类中并传递该包装器的实例。
-
保留对父类的引用。
-
@Eli 谢谢,有用的链接。