【问题标题】:Reference to reference in C#引用 C# 中的引用
【发布时间】:2014-10-23 21:03:19
【问题描述】:

在 C# 中,我想传递对尚未实例化的对象的引用。像这样:

    MyClass obj = new MyClass(obj);

在 C++ 中我可以这样做:

    class MyClass {
    public:
        MyClass( MyClass **obj ) : the_obj( obj ) { }
        MyClass** the_obj;
    };
    MyClass *obj = new MyClass(&obj);

如何在 C# 中做到这一点?

问候。

【问题讨论】:

  • 你想要一个引用自身的对象吗?
  • 为什么要这样做?顺便说一句,C# 有指针。见Is there pointer in C# like C++? Is it safe?
  • 在我看来,指针应该作为最后的手段。
  • 如果你解释what you are trying to accomplish,而不是你决定使用什么机制,那真的很有帮助。
  • 当您遇到诸如此类的语言问题时,通常表明它不是正确的方法(至少对于您使用的语言而言)。您尝试实现的目标可能有替代解决方案。如果您可以提供有关您的最终目标的详细信息,我们或许可以提供一些替代方案

标签: c# reference


【解决方案1】:

只需创建一个可变类,该类引用您作为成员感兴趣的类型:

public class Wrapper<T>
{
    public T Value { get; set; }
}

Wrapper<MyClass> wrapper = new Wrapper<MyClass>();

您现在有了对实例的引用,其中引用了 MyClass 的实例。

【讨论】:

  • @PeterSchneider 它被命名为wrapper。它是对 MyClass 的未初始化引用的引用。
  • @PeterSchneider 是的,确实如此,并且该对象本身就是一个引用,因为它是一个引用类型。这是 C/C++ 中指针的道德等价物。
  • Wrapper 的自动属性Value 的底层字段为空,不是吗?
  • @PeterSchneider 起初,是的。它可以被分配一个实例。它为 null 的事实使它成为指向未初始化指针的指针,这是特别要求的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-06
  • 1970-01-01
  • 2013-06-24
  • 2015-08-06
  • 2012-12-22
  • 1970-01-01
相关资源
最近更新 更多