使用SafeFileHandle和FileStream构造函数有什么好处

Salo7ty

SafeFileHandle从中看到了很多东西,从我看到的内容看,我认为我不必使用它,或者使用它没有任何好处,FileStream因为它是由处理它的文件流的第一个对象关闭的,我可以不能在其他物体上使用它。

谁能告诉我什么时候使用它?

static void Main(string[] args)
{

    string path = "Hello";

    SafeFileHandle handle = File.Open(path, FileMode.OpenOrCreate).SafeFileHandle;

    using (FileStream fs = new FileStream(handle, FileAccess.ReadWrite))
    {
        // do work
    }
        Console.ReadKey();
}

从我看到的定义SafeFileHandle是:就像一个人握着一根绳子的手,他们正在和孩子一起玩,而每个孩子握着绳子的第二只手。

person =文件句柄或任何句柄(网络连接或其他任何东西)

绳= SafeFileHandle

kids =想要使用文件句柄进行操作的对象,例如 FileStream

这是我对安全文件句柄的看法,对吗?

彼得·杜尼奥

接受的重载之所以SafeFileHandle存在,与现在已经过时的接受IntPtrdo的重载的原因相同:这样,您就可以FileStream从通过p / invoke interop(即从非托管代码)获得的文件句柄构造一个新实例。

SafeHandle.NET的最早版本中没有使用类型和惯用语。IntPtr任何需要处理本地句柄的托管代码都可以使用原始值。SafeHandle引入更好的类型时,为常用的本机句柄类型(例如文件句柄)提供特定的子类,然后在任何托管API中支持那些特定的子类,包括诸如for的构造函数的FileStream地方,就很有意义了。使用以前的类型。

您提供的示例永远不会(或至少永远不会)出现在现实世界的代码中。如果要从托管代码中打开文件并仅在托管代码中使用它,则只需执行此操作。您根本不需要任何理由来破坏本机文件句柄。仅当需要将本机文件句柄传递给非托管代码时,才使用对象SafeFileHandle属性;FileStream仅当您无法从非托管代码中获取该特定文件句柄时,才SafeFileHandle传递FileStream构造函数。

坦白说,我不太了解您对绳索和孩子的类比。不过,这对我来说似乎并不正确或无用。您已经对先前的非常广泛的问题有了答案,什么是C#中的SafeFileHandle?何时应使用?,因此您应该已经知道为什么SafeFileHandle存在,但在这里进行回顾:

  • SafeHandle,以及它的子类,提供了一种更好的选择,而不是使自己的类与终结器一起处理。SafeHandle类本身实现了终结的逻辑,这样你的类没有这样做。至少,只要您的类通常可以处理的唯一非托管对象可以包装在一个SafeHandle子类中,并且由于您可以实现自己的包装器,对于那些没有.NET提供的包装器的对象,这应该成为所有非托管对象-则不需要终结器。(您仍然需要实现IDisposable,以便可以确定性地清理非托管对象……终结器仅作为备份存在)。

我希望以上内容足以解释所有这一切。对于概念的广泛的,教程级的解释,堆栈溢出实际上并不是正确的地方。但是,假设上面的简短讨论提供了您需要了解这些构造函数为何存在的详细程度,这对我来说似乎很好。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

创建构造函数后使用原型有什么好处?

来自分类Dev

TearDown()和Setup()函数有什么好处?

来自分类Dev

使用调用构造函数的静态方法有什么好处(语义的还是其他的)?

来自分类Dev

MapEntry类中的工厂构造函数有什么好处?

来自分类Dev

使用instanceof和检查构造函数有什么区别?

来自分类Dev

零参数构造函数有什么好处?什么时候理想?

来自分类Dev

在PHP中使用use函数有什么好处?

来自分类Dev

在 Jest 中使用 beforeEach 函数有什么好处

来自分类Dev

FileShare枚举和其他FileStream构造函数枚举之间的关系是什么

来自分类Dev

FileShare枚举和其他FileStream构造函数枚举之间的关系是什么

来自分类Dev

Java:像这样在main中调用构造函数有什么好处吗?

来自分类Dev

Java:像这样在main中调用构造函数有什么好处吗?

来自分类Dev

在字体图标上使用:before和:after有什么好处?

来自分类Dev

使用FuseFS文件系统有什么好处和缺点?

来自分类Dev

使用UITableViewController有什么好处?

来自分类Dev

使用compose有什么好处?

来自分类Dev

使用ObjectSet有什么好处

来自分类Dev

使用arrayWithCapacity有什么好处

来自分类Dev

使用Elixir的“ with”有什么好处

来自分类Dev

使用Cordova有什么好处?

来自分类Dev

在值类上使用私有构造函数是否会否定值类的好处?

来自分类Dev

构造函数和类函数有什么区别

来自分类Dev

命名函数声明有什么好处吗?

来自分类Dev

具有工厂构造函数的抽象类的好处?

来自分类Dev

使用类型表示函数的好处是什么?

来自分类Dev

在函数中使用参数的好处是什么?

来自分类Dev

值构造函数和元组有什么区别?

来自分类Dev

构造函数和传递参数有什么区别?

来自分类Dev

Proxy构造函数和Reflect有什么区别?

Related 相关文章

  1. 1

    创建构造函数后使用原型有什么好处?

  2. 2

    TearDown()和Setup()函数有什么好处?

  3. 3

    使用调用构造函数的静态方法有什么好处(语义的还是其他的)?

  4. 4

    MapEntry类中的工厂构造函数有什么好处?

  5. 5

    使用instanceof和检查构造函数有什么区别?

  6. 6

    零参数构造函数有什么好处?什么时候理想?

  7. 7

    在PHP中使用use函数有什么好处?

  8. 8

    在 Jest 中使用 beforeEach 函数有什么好处

  9. 9

    FileShare枚举和其他FileStream构造函数枚举之间的关系是什么

  10. 10

    FileShare枚举和其他FileStream构造函数枚举之间的关系是什么

  11. 11

    Java:像这样在main中调用构造函数有什么好处吗?

  12. 12

    Java:像这样在main中调用构造函数有什么好处吗?

  13. 13

    在字体图标上使用:before和:after有什么好处?

  14. 14

    使用FuseFS文件系统有什么好处和缺点?

  15. 15

    使用UITableViewController有什么好处?

  16. 16

    使用compose有什么好处?

  17. 17

    使用ObjectSet有什么好处

  18. 18

    使用arrayWithCapacity有什么好处

  19. 19

    使用Elixir的“ with”有什么好处

  20. 20

    使用Cordova有什么好处?

  21. 21

    在值类上使用私有构造函数是否会否定值类的好处?

  22. 22

    构造函数和类函数有什么区别

  23. 23

    命名函数声明有什么好处吗?

  24. 24

    具有工厂构造函数的抽象类的好处?

  25. 25

    使用类型表示函数的好处是什么?

  26. 26

    在函数中使用参数的好处是什么?

  27. 27

    值构造函数和元组有什么区别?

  28. 28

    构造函数和传递参数有什么区别?

  29. 29

    Proxy构造函数和Reflect有什么区别?

热门标签

归档