这可能是个愚蠢的问题,但我还是要问,
我正在阅读“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/