如何使用函数通过引用返回。请为我提供完整的函数定义 在c#中通过引用返回。是否有其他方式传递引用?请帮忙。
答案 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"
答案 1 :(得分:5)
冒险的风险,你应该阅读C#参考:)
C#将事物划分为引用类型和值类型。您可以想象引用类型,通过引用传递。这意味着传递了对象的引用。
这是一个通过引用返回的人为例子:
class MyClass // <- Reference type.
{
private MyClass _child = new MyClass();
public MyClass GetChild()
{
return _child;
}
}
值类型按值传递;虽然我想象一下其他东西可能会继续下去。这对你来说并不重要,只有行为很重要。
值类型示例:int
,char
,Color
...
您可以通过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...
}