我想拥有以下功能:
var item0 = new Item();
var item1 = item0;
item0 = null;
Console.WriteLine(item1 == null); // true
所以我要覆盖item0和item1指向的内存。 我想也许我可以用指针做到这一点..?但是,当我尝试声明一个项目指针时:
Item* itemPointer;
我收到了一个错误。有什么想法吗?
答案 0 :(得分:5)
自C#7以来您可以使用Ref Locals:
ActionBar supportActionBar = getSupportActionBar(); //I target some low API
if(supportActionBar != null) {
supportActionBar.setDisplayShowHomeEnabled(false);
supportActionBar.setDisplayHomeAsUpEnabled(false);
supportActionBar.setHomeButtonEnabled(false);
supportActionBar.setHomeAsUpIndicator(null);
}
Ref returns and ref locals主要用于避免在时间敏感的场景中复制大型结构,例如必须处理大型矢量数组的游戏。我没有看到使用引用类型的优势。他们倾向于使代码难以理解,因此我会限制他们使用特殊和罕见的情况。
答案 1 :(得分:0)
var item0
{
get{return item0;}
set
{
item0 = value;
item1 = item0;
}
}
每当item0的值发生变化时,类似这样的东西都会覆盖item1的值。
答案 2 :(得分:0)
C#中没有本地别名/引用
但是参数有ref
个关键字:
static void RefClean(ref String arg){
arg = null;
}
static void Main(string[] args)
{
var test = "Hello";
Console.WriteLine(test == null);
RefClean(ref test);
Console.WriteLine(test == null);
}
<小时/> 对于指针,您需要
unsafe
关键字,并且您必须仅使用非托管类型(基本类型和从它们构建的结构),这将使用对象/引用排除您的情况。有关概述,请参阅https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/unsafe-code-pointers/pointer-types。