在方法之前或代码块之前使用关键字unsafe
有什么区别吗?
如果我只有几行不安全代码和几百个安全代码,如果在方法之前使用它,那会错吗?
这是一个主观的答案,但我会在方法级别使用unsafe
,如下所示:
private unsafe int MyFunc ( ... )
{
...
}
当您在函数主体中使用unsafe
时,它就被隐藏了,很难找到,而类似的东西应该很明显。每个人都将阅读函数声明,但并非每个人都将进入函数主体,除非他们需要这样做。
声明中具有unsafe
使其更加突出。
要回答您的第一个问题:请参见C#4.0规范章节:18.1
C#的不安全功能仅在不安全的上下文中可用。一个不安全上下文的引入是通过在类型或成员的声明,或使用不安全的声明:
•类,结构,接口或委托的声明可能包括一个不安全的修饰语,在这种情况下,其整个文字范围类型声明(包括类的主体,结构或接口)被视为不安全的上下文。
•的声明字段,方法,属性,事件,索引器,运算符,实例构造函数,析构函数或静态构造函数可能包含不安全的修饰符,在这种情况下,该成员的整个文字范围声明被认为是不安全的上下文。
•不安全声明允许在块内使用不安全的上下文。整个相关块的文本范围被认为是不安全的上下文。
第二个:根据第一个问题的结论,当然是NO WRONG。但是我更愿意用unsafe
语句包装几行不安全的代码,因为它更清晰,更容易找到。
不安全的代码使您可以直接寻址内存,因此它具有优缺点。通过本文,我已经对您的问题进行了一些阅读:http://www.codeproject.com/Articles/2363/Unsafe-programming-in-C,希望它可以引导您朝正确的方向发展。祝你好运!