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