c# - 在 C# 中实现接口(interface)和应用属性之间的区别

标签 c# interface attributes

这可能是个愚蠢的问题,但我还是要问,

我正在阅读“OOP Demystified:Jim Keogh 和 Mario Giannini 的自学指南”第 11 章,其中介绍了接口(interface)。本书中的例子都是C++。

这里的主要区别是什么?是不是对于一个接口(interface),您必须提供实现,就好像您赋予某些东西一样,编译器将为您制定实现?

我猜测 .Net 框架使用 [Serializable] 属性使用反射从实际对象生成序列化对象。

也就是说,在那种情况下是否有可能具有 [Disposable] 属性,或者使用我在框架之上的理论将不知道如何实际处置对象,因此您必须自己做?

非常感谢您的澄清。

最佳答案

很久以前,在一个遥远的星系中......没有属性或编译器支持类元数据,所以开发人员试图实现他们自己的。我们的祖先制定的方法之一是声明 Marker Interfaces .

因此,回答您的问题:自定义属性是标记界面的“演变”。您可以同时使用两者。但请注意,如果你想强制你的对象实现特定的方法,你正在使用一个简单明了的接口(interface)。这就是 IDisposable 的工作原理,它迫使您实现一个名为 Dispose() 的方法。 [Serializable](在您的 C++ 示例中可能还有 ISerializable)不会强制您执行任何操作,因为运行时只会读取该声明并执行其任务(即,序列化对象)。

请注意,C# 也有一个 ISerializable 接口(interface)...它旨在让您编写自定义序列化代码,然后由运行时调用。请注意,它不是标记接口(interface),也不是 [Serializable] 属性的替代品,因为您仍然需要使用该属性标记您的类才能使序列化工作。

关于c# - 在 C# 中实现接口(interface)和应用属性之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2667928/

相关文章:

python - sys.stderr 中何时不存在属性 `isatty()`?

c# - shdocvw.InternetExplorer NewWindow3/2。无法使用我自己的 Internet Explorer

java - 如何让扫描仪读取预设变量

c# - C# 4 中会有通用属性吗?

go - 嵌套接口(interface) : X does not implement Y (Wrong type for Z method)

c# - 为什么 DateTime.ToDateTime( ) 不能编译?

attributes - <script> 嵌入被 HTML Purifier(最新的 4.8.0)移除

c# - 如何在ASP.NET中使用MySqlDataAdapter进行插入操作

c# - SSHA512 在 C# 中为 Postfix 生成哈希值

c# - 我应该如何从字符串中获取复数?