如何在c#中覆盖内存中的一个点?

时间:2017-11-14 17:30:54

标签: c#

我想拥有以下功能:

var item0 = new Item();
var item1 = item0;
item0 = null;

Console.WriteLine(item1 == null); // true

所以我要覆盖item0和item1指向的内存。 我想也许我可以用指针做到这一点..?但是,当我尝试声明一个项目指针时:

Item* itemPointer;

我收到了一个错误。有什么想法吗?

3 个答案:

答案 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