【问题标题】:In which case should i pass an interface as a parameter instead of a class?在哪种情况下我应该将接口作为参数而不是类传递?
【发布时间】:2018-03-25 04:26:54
【问题描述】:

假设我有一个方法,那么当我将接口作为参数传递和将类作为参数传递时有什么区别?

Ex1.

public void GetPrice(IPartsData partsData)
{
     Do something
}

Ex2.
public void GetPrice(PartsData partsData)
{
     Do something.
}

在这里,在 Ex1 中,我正在 pssing 一个接口,在 Ex2 中,我在 GetPrice 方法中传递类。

【问题讨论】:

    标签: c# class methods interface parameter-passing


    【解决方案1】:

    例如。 1 是更好的实践,因为使用接口促进了松散耦合的设计。

    这意味着它更易于扩展、维护和单元测试。 (在单元测试方面,接口更容易模拟。)

    请参阅this 堆栈溢出帖子了解松散耦合和紧耦合之间的区别。

    【讨论】:

      【解决方案2】:

      想到一个特定的用例,它与您有 2 个类但两个类都有不同的 BaseClass 的场景有关。这意味着您不能使用BaseClass 类型的参数编写您的方法。相反,您将定义一个适合这两个类的接口并将其分配给这两个类。这使您可以将两个类都传递给具有BaseClass 类型参数的方法。

      【讨论】:

        【解决方案3】:

        这取决于您对方法行为的态度,如果您想让用户(使用您方法的其他开发人员)拥有自己的IPartsData 实现,您应该接受接口作为参数,在这种情况下,调用者可以使用类PartsData 的不同实现来调用您的方法。 但是,如果您想使用 IPartsData 的精确指定实现,您应该只接受 PartsData 的类作为参数。 这是面向对象编程中的某种 IoC 概念。

        【讨论】:

          【解决方案4】:

          在这两种情况下,您都在传递类的实例。但是,当您在参数中使用接口时,除非您强制转换,否则您将仅限于接口中描述的功能。

          这也意味着该方法更友好一点,因为其他实现也可以使用该方法,并且更易于单元测试。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-04-02
            • 2016-03-15
            • 2015-09-10
            • 2021-09-14
            • 2013-04-12
            • 2016-09-25
            • 2016-03-07
            相关资源
            最近更新 更多