关于c#:我在创建对象时使用接口 – 我应该只在接口方法中为参数设置默认值吗?


I use interface when I create object - should I set default value for parameter only in interface method?

我在创建对象的时候使用了接口类型——我应该只在接口方法中为参数(=5)设置默认值吗,如下所示?或者也可以在类方法中设置默认值(=5)-在这种情况下,最好的方法是什么?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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();
    }
}


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

1
2
3
4
5
MyClass c = new MyClass();
c.MyMethod(); // Invalid

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

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

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

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

1
2
 void MyMethod();
 void MyMethod(int x);

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

从根本上说,你想知道你想要什么样的行为——当你知道你想要什么样的行为时,很可能很容易就可以对你想要的任何行为进行编码。