c#unsafe - 在方法或代码块之前?

时间:2012-02-27 02:43:03

标签: c# unsafe

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

如果我在方法之前使用-unsafe-关键字,只有几行不安全代码和数百个安全代码,那会不会错?

3 个答案:

答案 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我希望它可以引导你朝着正确的方向前进。祝你好运!