类装饰器和继承类之间的区别

时间:2018-10-13 02:31:43

标签: c# inheritance decorator

我正在学习NUnit,发现我们在每个测试函数之前都使用了[TestMethod]之类的类修饰符。

然后我在this链接上了解了装饰器。根据这个答案

  

在C#中添加装饰器时,就像在类/方法中添加属性一样。将附加一个属性。

我只想问我是否要在整个类中使用属​​性(而不是讨论一种方法),那为什么我不选择继承类装饰器呢?

有什么区别...

2 个答案:

答案 0 :(得分:1)

主要区别在于,如果对装饰器使用继承,则可能会有成倍的子类。

使用这样的属性装饰器的主要目的是为了横切关注点,您可以在许多类和方法(可重用)中重用同一装饰器

就您而言,情况完全不同。 [TestMethod]用作“标记”而不是修饰符,以使框架知道哪种方法是测试方法。在这种情况下,我看不到与继承有任何关系。

您还可以将接口用作“标记”,但是在这种情况下,它不如使用属性灵活。

答案 1 :(得分:1)

请注意,因为link you provided使用 Decorator 这个词来表示2个完全不同的概念。该链接中的问题是在问这个问题:

  

装饰类或参数是什么意思?

     

目的是什么,什么时候可以做?

一些答案​​,请正确正确回答问题thisthis。这两个人都在谈论Decorator Pattern

但是,this的答案是在谈论完全不同的东西。尽管 decorator 可以用来表示属性(在C#中带有方括号),但是SO线程正在使用它来表示 Decorator Pattern >和属性


属性

here对属性进行了说明。


装饰图案

here说明了装饰器模式模式。


装饰器模式与继承

比较here