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

C# 类装饰器和继承类之间的区别,c#,inheritance,decorator,C#,Inheritance,Decorator,我在学习NUnit时发现,我们在每个测试函数之前都使用类装饰器,如[TestMethod] 然后我在林克了解了装饰师。根据这个答案, 在C中添加decorator时,就像在类/方法中添加属性一样。它将附加一个属性 我只是想问一下,如果我想在整个类中使用属性(不是说一个方法),那么为什么我不选择继承而不是类装饰器呢 区别是什么…主要区别是,如果使用继承而不是装饰器,则可能会有成倍多的子类 使用这样的属性装饰器的要点是为了跨领域考虑,您可以跨许多类和方法重用相同的装饰器(可重用) 你的情况完全不同[

我在学习NUnit时发现,我们在每个测试函数之前都使用类装饰器,如
[TestMethod]

然后我在林克了解了装饰师。根据这个答案,

在C中添加decorator时,就像在类/方法中添加属性一样。它将附加一个属性

我只是想问一下,如果我想在整个类中使用属性(不是说一个方法),那么为什么我不选择继承而不是类装饰器呢


区别是什么…

主要区别是,如果使用继承而不是装饰器,则可能会有成倍多的子类

使用这样的属性装饰器的要点是为了跨领域考虑,您可以跨许多类和方法重用相同的装饰器(可重用)

你的情况完全不同
[TestMethod]
用作“标记器”而不是装饰器,让框架知道哪种方法是测试方法。在这种情况下,我看不出与继承有任何关系


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

主要区别在于,如果您使用继承而不是装饰器,则可能会有成倍多的子类

使用这样的属性装饰器的要点是为了跨领域考虑,您可以跨许多类和方法重用相同的装饰器(可重用)

你的情况完全不同
[TestMethod]
用作“标记器”而不是装饰器,让框架知道哪种方法是测试方法。在这种情况下,我看不出与继承有任何关系

您也可以使用接口作为“标记”,但在本例中,它不如使用属性灵活。

请小心,因为使用Decorator一词表示两个完全不同的概念。该链接中的问题是提出以下问题:

修饰类或参数意味着什么

目的是什么?我什么时候做

一些答案,具体正确地回答问题。这两个人都在谈论这个问题

然而,答案是谈论完全不同的东西。虽然decorator可以用来表示属性(C#中带方括号的属性),但是thread使用它来表示decorator模式和属性


属性

对属性进行了解释


装饰图案

解释了装饰图案


装饰模式与继承

这是一个很好的比较。

要小心,因为使用Decorator这个词是指两个完全不同的概念。该链接中的问题是提出以下问题:

修饰类或参数意味着什么

目的是什么?我什么时候做

一些答案,具体正确地回答问题。这两个人都在谈论这个问题

然而,答案是谈论完全不同的东西。虽然decorator可以用来表示属性(C#中带方括号的属性),但是thread使用它来表示decorator模式和属性


属性

对属性进行了解释


装饰图案

解释了装饰图案


装饰模式与继承


这是一个很好的比较。

它们被称为属性。它们是元数据,可以应用于类、方法、属性等。继承和属性就像桔子和苹果;无法比较。它们的可能重复项称为属性。它们是元数据,可以应用于类、方法、属性等。继承和属性就像桔子和苹果;无法比较。您能解释一下可能的副本吗?我不明白你在干什么saying@TeraByte:假设你有3个decorator和5个可以应用的类,那么你只需要编写8个类。但是如果你使用继承,你需要有3x5(15个类),如果你有更多的类和功能,这个数字可能是指数级的。@TB:但是在你的
[TestMethod]
示例中,它更像是一个“marker”属性,而不是类装饰器。在这种情况下,我看不出与继承有任何关系,你能解释一下吗?我不明白你在干什么saying@TeraByte:假设你有3个decorator和5个可以应用的类,那么你只需要编写8个类。但是如果你使用继承,你需要有3x5(15个类),如果你有更多的类和功能,这个数字可能是指数级的。@TB:但是在你的
[TestMethod]
示例中,它更像是一个“marker”属性,而不是类装饰器。在这种情况下,我看不出与继承有任何关系