【问题标题】:Difference between class decorator and Inheriting class类装饰器和继承类的区别
【发布时间】:2023-04-09 10:16:01
【问题描述】:

我在学习 NUnit 时发现我们在每个测试函数之前都使用了像 [TestMethod] 这样的类装饰器。

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

当您在 C# 中添加装饰器时,就像在 类/方法 中添加一个属性。会有一个属性附加到它上面。

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

有什么区别...

【问题讨论】:

  • 它们被称为属性。它们是元数据,可以应用于类、方法、属性等。继承和属性就像橘子和苹果;无法比较。

标签: c# inheritance decorator


【解决方案1】:

小心,因为link you provided 使用了装饰器这个词来指代两个完全不同的概念。该链接中的问题是问这个问题:

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

这样做的目的和时间是什么?

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

但是,this 的答案是在谈论完全不同的事情。虽然 decorator 可以用来表示 Attributes (在 C# 中带有方括号的那些)但是那个 SO 线程使用它来表示 Decorator Pattern属性


属性

属性解释here


装饰器模式

Decorator Pattern 模式解释here.


装饰器模式与继承

有一个很好的比较here

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

    • 你能解释一下吗?我没听懂你在说什么
    • @TeraByte:假设你有 3 个装饰器和 5 个可以申请的类,那么你只需要编写 8 个类。但是如果你使用继承,你需要有 3x5(15 个类),如果你有更多的类和功能,这个数字可能是指数级的。
    • @TeraByte:但在您的[TestMethod] 示例中,它更像是“标记”属性而不是类装饰器。在那种情况下,我看不出与继承有任何关系
    猜你喜欢
    • 2011-03-23
    • 2012-11-14
    • 2011-06-06
    • 2011-11-20
    • 1970-01-01
    • 2014-01-20
    • 2014-03-07
    • 2011-02-02
    • 2016-12-05
    相关资源
    最近更新 更多