Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
德尔福的等价物是什么;“零内存”;在C#中?_C#_Delphi_Equivalent - Fatal编程技术网

德尔福的等价物是什么;“零内存”;在C#中?

德尔福的等价物是什么;“零内存”;在C#中?,c#,delphi,equivalent,C#,Delphi,Equivalent,在delphi的“ZeroMemory”过程中,询问两个参数 代码示例 procedure ZeroMemory(Destination: Pointer; Length: DWORD); begin FillChar(Destination^, Length, 0); end; 我想做这个,或者类似的C#。。。那么,它们的等价物是什么 提前谢谢 您很少需要C#中的不安全代码。通常仅在与本机库交互时 该类作为一些低级助手函数,但我不知道有任何函数会将内存归零。首先,在.Net(包括C#)中,

在delphi的“ZeroMemory”过程中,询问两个参数

代码示例

procedure ZeroMemory(Destination: Pointer; Length: DWORD);
begin
 FillChar(Destination^, Length, 0);
end;
我想做这个,或者类似的C#。。。那么,它们的等价物是什么


提前谢谢

您很少需要C#中的不安全代码。通常仅在与本机库交互时

该类作为一些低级助手函数,但我不知道有任何函数会将内存归零。

首先,在.Net(包括C#)中,默认情况下,值类型为零-因此这消除了ZeroMemory的一个常见用途

其次,如果要将类型为T的列表归零,请尝试以下方法:

void ZeroMemory<T>(IList<T> destination)
{
    for (var i=0;i<destination.Count; i+))
   {
       destination[i] = default(T);
   }
}
void ZeroMemory(IList目标)
{
对于(var i=0;i.NET framework对象始终初始化为已知状态)
.NET framework值类型会自动“归零”-这意味着框架保证在将其返回给您使用之前将其初始化为其自然默认值。由值类型(例如数组、结构、对象)组成的对象的字段也会进行类似的初始化

一般来说,在.NET中,所有托管对象都初始化为默认值,并且在其他非托管环境中,对象的内容永远不会像在其他非托管环境中一样不可预测(因为它包含恰好位于该特定内存位置的数据)

回答:您不需要这样做,因为.NET会自动为您“归零”对象。但是,您应该知道每种值类型的默认值是什么。例如,
bool
的默认值为false,
int
的默认值为零

非托管对象 “归零”内存区域通常仅在与外部非托管库交互时才需要

如果您有一个指向内存区域的固定指针,其中包含要传递到外部非托管库(例如,用C编写)的数据,并且希望将该内存区域归零,那么您的指针很可能指向字节数组,您可以使用简单的for循环将其归零

离题笔记
另一方面,如果在.NET中分配了一个大型对象,请尝试重用它,而不是将其丢弃并分配一个新对象。这是因为任何新对象都会自动“归零”通过.NET framework,对于大型对象,此清除操作将导致隐藏的性能损失。

从技术上讲,存在
数组。清除
,但它仅适用于托管数组。您想做什么?

为什么要这样做?此方法通常不适用于c#,因此了解原因将有助于为您找到解决方案。FTR:ZeroMemory是一个Windows API例程,而不是Delphi例程。由于它是一个宏,您可能无法从C#使用它。但是,根据MSDN,有一个真正的函数SecureZeroMemory。只需在循环中调用!然后您就可以使用
字节*
并自己执行。即使这样也会相当慢。我正在将Delphi代码转换为C#,一个nd…我找到了那个程序,但我的问题已经解决了。非常感谢大家!:)