我在创建对象时使用了接口-我应该只在接口方法中为参数设置默认值吗?

本文关键字:接口 参数 默认值 方法 设置 我应该 创建对象 | 更新日期: 2023-09-27 18:11:32

我使用接口类型当我创建对象的一些类-我应该设置默认值参数(=5)只在接口方法,你可以看到下面?或者也可以在类方法中设置默认值(=5)-在这种情况下最好的方法是什么?

public interface MyInterface
{
    void MyMethod(int count = 5);
}
public class MyClass : MyInterface
{
    public void MyMethod(int count)
    {
    }
}
public class TestClass
{
    private MyInterface _x;
    public TestClass(MyInterface x)
    {
       _x = x;
    }
    public void TestMethod()
    {
       _x.MyMethod();
    }
}

我在创建对象时使用了接口-我应该只在接口方法中为参数设置默认值吗?

你需要定义"best"。默认值基本上只应用于您尝试调用的类型。例如,对于当前的代码:

MyClass c = new MyClass();
c.MyMethod(); // Invalid
MyInterface i = new MyClass();
i.MyMethod(); // Valid

如果你只通过接口引用类——或者如果这是你调用方法的唯一方式,至少——那么把默认值放在接口中是可以的。

您甚至可以为类和接口给不同的默认参数值——但我强烈建议不要这样做。这也意味着,如果您确实决定为类和接口使用相同的默认值,那么如果您(小心地)更改其中一个,则需要确保它们保持同步。

我个人很少使用可选参数。它们可能非常有用,但你需要仔细考虑它们。另一种方法是在接口中声明两个重载:

 void MyMethod();
 void MyMethod(int x);

…或者有一个实现接口的抽象类,保持MyMethod(int x)是抽象的,但直接从MyMethod()调用它并使用默认值,或者简单地在MyClass中适当地实现它。

从根本上说,你想要弄清楚你想要的行为-当你弄清楚行为是什么时,可能很容易编写任何你想要的行为。