关键字“不安全”-在方法或代码块之前?

问题描述 投票:3回答:3

在方法之前或代码块之前使用关键字unsafe有什么区别吗?

如果我只有几行不安全代码和几百个安全代码,如果在方法之前使用它,那会错吗?

c# unsafe
3个回答
6
投票

这是一个主观的答案,但我会在方法级别使用unsafe,如下所示:

private unsafe int MyFunc ( ... )
{
    ...
}

当您在函数主体中使用unsafe时,它就被隐藏了,很难找到,而类似的东西应该很明显。每个人都将阅读函数声明,但并非每个人都将进入函数主体,除非他们需要这样做。

声明中具有unsafe使其更加突出。


2
投票

要回答您的第一个问题:请参见C#4.0规范章节:18.1

C#的不安全功能仅在不安全的上下文中可用。一个不安全上下文的引入是通过在类型或成员的声明,或使用不安全的声明:

•类,结构,接口或委托的声明可能包括一个不安全的修饰语,在这种情况下,其整个文字范围类型声明(包括类的主体,结构或接口)被视为不安全的上下文。

•的声明字段,方法,属性,事件,索引器,运算符,实例构造函数,析构函数或静态构造函数可能包含不安全的修饰符,在这种情况下,该成员的整个文字范围声明被认为是不安全的上下文。

•不安全声明允许在块内使用不安全的上下文。整个相关块的文本范围被认为是不安全的上下文。

第二个:根据第一个问题的结论,当然是NO WRONG。但是我更愿意用unsafe语句包装几行不安全的代码,因为它更清晰,更容易找到。


1
投票

不安全的代码使您可以直接寻址内存,因此它具有优缺点。通过本文,我已经对您的问题进行了一些阅读:http://www.codeproject.com/Articles/2363/Unsafe-programming-in-C,希望它可以引导您朝正确的方向发展。祝你好运!

© www.soinside.com 2019 - 2024. All rights reserved.