假设我有一个方法,现在将接口作为参数传递并将类作为参数传递时有什么不同?
Ex1.
public void GetPrice(IPartsData partsData)
{
Do something
}
Ex2.
public void GetPrice(PartsData partsData)
{
Do something.
}
在Ex1中,我正在使用接口,在Ex2中,我在GetPrice方法中传递类。
答案 0 :(得分:1)
在这两种情况下,您都要通过该类的实例。但是,在参数中使用接口时,除非进行转换,否则仅限于界面中描述的功能。
这也意味着该方法更加友好,因为其他实现也可以使用该方法,并且还可以进行单元测试。
答案 1 :(得分:0)
这取决于您对方法行为的态度,如果您想允许用户(使用您的方法的其他开发人员)拥有自己的const value= "c.1.3";
const tree= [
{
"id": "c.1",
"children": [
{
"id": "c.1.1"
},
{
"id": "c.1.2"
},
{
"id": "c.1.3"
}
]
}
];
const findTree= (tree)=>Rx.Observable.from(tree)
.mergeMap(node=>{
if(!!node.children)
return findTree(node.children);
return Rx.Observable.of(node);
})
.find(node=>node.id==value);
findTree(tree).subscribe(console.info);
实现,您应该接受接口作为参数,在这种情况下调用者可以使用类IPartsData
的不同实现来调用您的方法。
但是如果你想要使用已经实现的PartsData
的确切指定的实现,那么你应该只接受IPartsData
类作为参数。
这是OOP编程中的某种IoC概念。
答案 2 :(得分:0)
与您有2个类但两个类具有不同BaseClass
的场景相关联时,会想到一个特定用例。这意味着您无法使用BaseClass
类型的参数编写方法。相反,您将定义适合两个类的接口并将其分配给两个类。这使您可以将两个类传递给参数类型为BaseClass
的方法。
答案 3 :(得分:0)