1
14
我通常避免使用“标记接口”,因为它们不允许您 取消标记 派生类型。但除此之外,我还看到了一些特定的例子,其中标记接口比内置元数据支持更可取:
|
2
10
对于泛型类型,您可能希望在标记接口中使用相同的泛型参数。这是无法通过属性实现的:
这种接口可能有助于将一个类型与另一个类型相关联。 标记接口的另一个好用法是 kind of mixin :
这个 acyclic visitor pattern 也使用它们。有时也使用“退化接口”一词。 更新: 我不知道这个算不算,但我用它们来标记 post-compiler 继续工作。 |
3
6
微软在制作.NET 1.0时并没有严格遵循这些指导原则,因为这些指导原则是与框架一起发展的,有些规则他们直到太晚才学会更改API。 IIRC,你提到的例子属于BCL1.0,所以这可以解释它。 这在 Framework Design Guidelines . 也就是说,这本书还评论说“属性测试比类型检查要昂贵得多”(在Rico Mariani的侧边栏中)。 它接着说,有时您需要标记接口来进行编译时检查,而这对于属性是不可能的。然而,我发现书中给出的例子(第88页)无法令人信服,所以我不会在这里重复。 |
4
4
我非常支持标记界面。我从不喜欢属性。我将它们视为类和成员的某种元信息,例如供调试器查看。与异常类似,它们不应该影响正常的处理逻辑,在我看来,这是最起码的。 |
5
3
从编码的角度来看,我认为我更喜欢标记接口语法,因为内置的关键字
以及一些使用代码的测试:
|
6
2
从性能角度来看:
由于反射,标记属性将比标记接口慢。如果不缓存反射,则调用
这只适用于在经常调用的代码中使用它的情况。
不过,这没有显著差异。
|
Haim Ohayon · 这些链接之间有什么区别? 2 年前 |