在类中实现显式接口成员
在 C# 中,显式接口实现允许类以仅可通过接口(而不是类实例)访问的方式实现接口成员。 当类实现具有相同签名的成员的多个接口时,这非常有用。
类中的多个接口
C# 中的类可以实现多个接口,从而允许它从各种源继承行为。 合并多个接口的能力至关重要,因为 C# 不支持多个类的多个继承。 实现多个接口允许类具有不同的功能,并确保它遵循这些接口设置的规则。
- 接口定义一组相关功能。
- 类或结构必须实现它继承的接口的所有成员。
- 接口可以包含方法、属性、事件和索引器。
下面是我们的示例的两个简单接口:
public interface IEnglishDimensions
{
float Length();
float Width();
}
public interface IMetricDimensions
{
float Length();
float Width();
}
显式接口成员
在 C# 中,类只能从一个类继承,但可以实现多个接口。 当多个接口具有相同的成员名称时,这一点尤其重要。 为了避免混淆,我们使用显式接口实现。
显式接口实现可确保接口的每个成员都具有唯一的实现,从而防止冲突。 它还阐明了当类实现具有相同成员名称的两个或多个接口时成员所属的接口。 显式接口实现允许类满足多个接口的要求,从而提供不同的功能。
若要显式实现接口的成员,请在成员名称前面添加接口名称和句点。 下面是一个示例:
public class Box : IEnglishDimensions, IMetricDimensions
{
float IEnglishDimensions.Length()
{
return 30.0f;
}
float IEnglishDimensions.Width()
{
return 20.0f;
}
float IMetricDimensions.Length()
{
return 76.2f;
}
float IMetricDimensions.Width()
{
return 50.8f;
}
}
在此代码中,该 Box 类实现两个接口: IEnglishDimensions 和 IMetricDimensions。 两个接口都有名为 Length 和 Width 的成员。 为了避免混淆,每个成员将显式链接到其接口。
注释
显式实现的接口成员没有访问修饰符,例如 public, private等等。只能通过接口的实例(而不是类)访问它们。 这意味着你不能调用Box.Length(),但如果你有一个作为IEnglishDimensions.Length()处理的Box实例,你可以调用IEnglishDimensions。
使用显式接口成员
你需要创建接口的实例,并调用其成员来执行和测试利用显式接口成员的代码。 这可确保基于接口类型调用正确的实现。
Box box = new Box();
IEnglishDimensions eDimensions = box;
IMetricDimensions mDimensions = box;
Console.WriteLine($"Length in inches: {eDimensions.Length()}");
Console.WriteLine($"Width in inches: {eDimensions.Width()}");
Console.WriteLine($"Length in centimeters: {mDimensions.Length()}");
Console.WriteLine($"Width in centimeters: {mDimensions.Width()}");
在此示例中,Box 类实例被强制转换为 IEnglishDimensions 和 IMetricDimensions,以访问显式接口成员。 输出以英制和公制单位显示维度。
Length in inches: 30
Width in inches: 20
Length in centimeters: 76.2
Width in centimeters: 50.8
在 C# 中,可以在类中实现多个接口,使用显式接口实现来解决成员具有相同签名时的命名冲突。 显式实现的成员通过接口实例(而不是类实例)进行访问,确保适当的功能并避免歧义。 此方法通过明确定义每个接口的预期行为来提高代码可维护性,从而使代码库更易于理解和扩展。