【发布时间】:2017-08-14 18:34:28
【问题描述】:
大家好 - 告诉我如何进行这项工作?基本上,我需要一个整数引用类型(int* 可以在 C++ 中工作)
class Bar
{
private ref int m_ref; // This doesn't exist
public A(ref int val)
{
m_ref = val;
}
public void AddOne()
{
m_ref++;
}
}
class Program
{
static void main()
{
int foo = 7;
Bar b = new Bar(ref foo);
b.AddOne();
Console.WriteLine(foo); // This should print '8'
}
}
我必须使用拳击吗?
编辑: 也许我应该更具体。我正在编写一个 BitAccessor 类,它只允许访问单个位。这是我想要的用法:
class MyGlorifiedInt
{
private int m_val;
...
public BitAccessor Bits {
return new BitAccessor(m_val);
}
}
用法:
MyGlorifiedInt val = new MyGlorifiedInt(7);
val.Bits[0] = false; // Bits gets a new BitAccessor
Console.WriteLine(val); // outputs 6
要使 BitAccessor 能够修改 m_val,它需要对其进行引用。但我想在很多地方使用这个 BitAccessor,只需要引用所需的整数。
【问题讨论】:
-
您的目标是什么?这基本上违背了托管代码的整个想法。如果您可以在生命周期与
main无关的其他类中存储对foo的引用,那么当main退出并且foo所在的堆栈帧被破坏时会发生什么? -
@tzaman,我的编辑是否明确了我的意图? @abatishchev - 我想,但没有一个答案完全符合我的要求。也许这是不可能的。
-
为什么不安全的指针不能满足您的需求?你甚至提到如果这是在 C++ 中,指针就可以解决问题。
-
这是stackoverflow.com/questions/2980463/… 的副本,请参阅我的回答,了解为什么不能将引用存储到字段中的变量以及绕过该限制的方法。
-
是的,我想我明白你现在想要做什么了。我已经回答了这样做的方法。
标签: c# reference value-type