[英]What do I gain by setting the default values in the interface if I always have to set them again in the implementation?
我创建了以下界面。
public interface IMineralService
{
Task<Mineral[]> GetMinerals(int page = 0, int size = Int32.MaxValue);
Task<Mineral> GetMineral(int id);
}
其实现如下。
public class MineralService : IMineralService
{
public async Task<Mineral[]> GetMinerals(int page = 0, int size = Int32.MaxValue)
{
Mineral[] data = await Task.FromResult(Minerals);
return data.Skip(page * size).Take(size).ToArray();
}
public async Task<Mineral> GetMineral(int id)
{
Mineral[] data = await GetMinerals();
return data.SingleOrDefault(a => a.Id == id);
}
}
我不明白在构造函数和实现中声明参数默认值的目的或含义是什么。 跳过默认值不会与实现接口相冲突,因此以下内容将起作用。 Id est - 没有将接口的默认设置强加到实现上。
public interface IMineralService
{
Task<Mineral[]> GetMinerals(int page = 0, int size = Int32.MaxValue);
}
public class MineralService : IMineralService
{
public async Task<Mineral[]> GetMinerals(int page, int size) { ... }
}
它也适用于仅在实现中声明的默认值。
public interface IMineralService
{
Task<Mineral[]> GetMinerals(int page, int size);
}
public class MineralService : IMineralService
{
public async Task<Mineral[]> GetMinerals(int page = 0, int size = Int32.MaxValue)
}
但是,为了使第二种方法与await GetMinerals() 一起使用,必须在实现中设置默认值。 那么,如果必须在实现中重新声明(如果它被另一个调用使用)或根本不需要(如果没有其他调用使用默认值),那么在构造函数中设置默认值有什么意义?
设置默认值不会向设置了默认值的类添加任何代码来设置这些值。 相反,它使得任何调用这些方法而不提供显式值的消耗代码实际上都将被编译为传递指定的值。
因此,这些可选参数的可选性与方法的实际实现细节是分离的。
这意味着您实现的不同接口可以提供不同的默认值。 或者接口和类具有不同的默认值。 或者实现类甚至根本不指定默认值,但接口的使用者仍然能够调用该类的方法而无需提供显式值。
因此,这类似于决定一个类是应该显式实现还是隐式实现接口方法:您需要考虑如何使用您的类和接口。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.