2017-02-23 54 views
1

我只需要对引用变量有基本的了解,因为我处于基本类中。我的教授希望我们声明一个参考变量来存储对象的地址,我不知道该怎么做,甚至不知道该做什么。C#如何声明一个引用变量来存储对象的地址

他的确教会我们如何做这样的事情。

public double Method(ref name) 

但我不明白这应该如何存储对象的'地址'。

任何解释是非常感谢。

+0

[REF(C#参考)(https://msdn.microsoft.com/en-us/library/14akc2c7(V = VS.90)的.aspx ) –

+1

该地址是不安全的代码。 –

+1

您可以通过将其转换为“对象”来获取对某个值的引用。在C#中有值类型和引用类型,并且_never_是您应该担心对象地址的一个原因。 – ja72

回答

0

请看下面的例子:

public static double SeName0(MyType new_name) 
{ 
    new_name = new MyType(); // only new_name reference to a new object 
} 

public static double SeName1(ref MyType new_name) 
{ 
    new_name = new MyType(); // both name and ref new_name reference to a new object 
} 

public static void Main() 
{ 
    MyType name; 
    SeName0(name); // Do not touch name variable in this local scope 
    SeName1(name); // Change name reference to new object 
} 

让我们想象一下一个栈的程序:

enter image description here

薄箭头表示裁判的名字需要在原有的和地址同一时间是对同一个对象的引用。 如果你只对对象调用函数什么都不会发生。 但是,如果你改变裁判的名字引用到另一个对象,则原始参考名称或者变化。

0

的问题是有点含糊,虽然,他可以简单地检查是否理解引用类型和值类型在C#这是远远在我看来比了解ref关键字对方法参数的使用更为重要。

随着它是没有坏处提,值类型被存储在被存储在管理堆存储器堆栈和引用类型。他们的地址作为值类型存储在堆栈中,称为参考。

下面你实例化对象,也就是引用类型和在堆上创建。 obj1包含指向托管堆的指针的值。

Object obj1 = new Object();

以下声明另一个名为obj2的引用类型变量。这次你不要实例化,你只需将obj1引用的值赋给obj2。

Object obj2 = obj1;

这可能是你的教授问你的。即使这并非如此尚好知道:)