Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 一个方法可以实现多个接口方法吗?_C#_Interface - Fatal编程技术网

C# 一个方法可以实现多个接口方法吗?

C# 一个方法可以实现多个接口方法吗?,c#,interface,C#,Interface,这是接口方法的两个实现,正如您所看到的,它们在本例中做了相同的事情 public override IList GetReadByOwnerIdParameters(int-id){ 返回新列表{ 新的DatastoreRequestParameter(“@CustomerId”,id) }; } 公共覆盖IList GetDeleteByOwnerIdParameters(int-id){ 返回新列表{ 新的DatastoreRequestParameter(“@CustomerId”,id)

这是接口方法的两个实现,正如您所看到的,它们在本例中做了相同的事情

public override IList GetReadByOwnerIdParameters(int-id){
返回新列表{
新的DatastoreRequestParameter(“@CustomerId”,id)
};
}
公共覆盖IList GetDeleteByOwnerIdParameters(int-id){
返回新列表{
新的DatastoreRequestParameter(“@CustomerId”,id)
};
}

但是,由于我们在任何地方都使用此接口,有时它们是相同的,但在实现中也可以返回不同的参数。我知道我可以创建一个私有方法来返回同样的东西,我只是想看看这是否可行。我的直觉告诉我没有,但是SO比我的直觉更聪明,所以我在这里。

你不能创建一个方法,并告诉编译器/平台在调用两个不同的方法时使用它。正如您所说的,您可以创建一个私有方法来处理这个案例并调用它,但是您必须在接口中单独实现这些方法。

您不能创建一个方法并告诉编译器/平台在调用两个不同的方法时使用它。正如您所说的,您可以创建一个私有方法来处理这个案例并调用它,但是您必须在接口中单独实现这些方法。

或者从第一个接口调用第二个接口方法。@Ralf这也是一种可能性,但在读取代码时可能会引起一些混乱,这取决于它是如何完成的。例如,在这种情况下,如果
GetDeletedByOwnerIdParameters
将调用
GetReadByOwnerIdParameters
,人们可能会想,为什么读取的参数也会被删除。这就是我所想的。谢谢,当然可以。这要视情况而定,而且大多数情况下,私有方法是最具描述性的。如果给私有方法一个描述性的名称(不说谎),我可能不会尝试创建一个人工名称,而只是调用另一个接口方法。@Ralf我发布的代码就是我使用的实现。创建一个私有方法对我没有任何好处,事实上,代码几乎是零。或者从第一个接口方法调用第二个接口方法。@Ralf这也是一种可能性,但它在读取代码时可能会引起一些混乱,这取决于它是如何完成的。例如,在这种情况下,如果
GetDeletedByOwnerIdParameters
将调用
GetReadByOwnerIdParameters
,人们可能会想,为什么读取的参数也会被删除。这就是我所想的。谢谢,当然可以。这要视情况而定,而且大多数情况下,私有方法是最具描述性的。如果给私有方法一个描述性的名称(不说谎),我可能不会尝试创建一个人工名称,而只是调用另一个接口方法。@Ralf我发布的代码就是我使用的实现。创建一个私有方法对我没有任何好处,实际上,作为代码几乎什么都没有。
public override IList<IDatastoreRequestParameter> GetReadByOwnerIdParameters(int id) {
    return new List<IDatastoreRequestParameter> {
        new DatastoreRequestParameter("@CustomerId", id)
    };
}

public override IList<IDatastoreRequestParameter> GetDeleteByOwnerIdParameters(int id) {
    return new List<IDatastoreRequestParameter> {
        new DatastoreRequestParameter("@CustomerId", id)
    };
}