在c#中按引用返回?

时间:2010-08-21 12:20:20

标签: c#

如何使用函数通过引用返回。请为我提供完整的函数定义 在c#中通过引用返回。是否有其他方式传递引用?请帮忙。

4 个答案:

答案 0 :(得分:5)

这是一个按值返回对象引用的方法:

string Foo()
{
    return "Hello";
}

string f = Foo();
//  f == "Hello"

您不能通过引用返回任何内容,但可以通过引用将变量作为参数传递:

void Bar(ref string s)
{
    s = "Hello";
}

string f = null;
Bar(ref f);
//  f == "Hello"

请参阅:Parameter passing in C#

答案 1 :(得分:5)

冒险的风险,你应该阅读C#参考:)

C#将事物划分为引用类型和值类型。您可以想象引用类型,通过引用传递。这意味着传递了对象的引用。

这是一个通过引用返回的人为例子:

class MyClass // <- Reference type.
{
   private MyClass _child = new MyClass();

   public MyClass GetChild()
   {
      return _child;
   }
}

值类型按值传递;虽然我想象一下其他东西可能会继续下去。这对你来说并不重要,只有行为很重要。

值类型示例:intcharColor ...

您可以通过class创建引用类型,并通过struct创建值类型。

答案 2 :(得分:3)

如果从函数返回引用类型,则引用该对象。 您可能想要阅读refence和value类型以及传递参数(通过ref和out)。见CLR via C#

答案 3 :(得分:3)

返回引用是C ++术语。演示语法的示例:

class Array {                  // This is C++ code
 public:
   int size() const;
   float& operator[] (int index);
   ...
 };

 int main()
 {
   Array a;
   for (int i = 0; i < a.size(); ++i)
     a[i] = 7;    // This line invokes Array::operator[](int)
   ...
 } 

C#没有此功能,它与垃圾收集器的概念完全不兼容。 C ++通过实际返回指针实现了这一点。当垃圾收集器移动底层内部数组时,指针变得无效。

这不是什么大问题,因为对象的变量在托管代码中已经是真正的引用,就像引用的C ++概念一样。但是不是值类型,它们被复制。您将在此特定示例中使用索引器:

class Array<T> {            // This is C# code
    private T[] storage;
    public T this[int index] {
        get { return storage[index]; }
        set { storage[index] = value; }
    }
    // etc...        
}