Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La implementación explícita de interfaces también permite al programador implementar dos interfaces que tienen los mismos nombres de miembros y dar a cada miembro de una interfaz una implementación independiente. En este ejemplo se muestran las dimensiones de un cuadro en unidades métricas e inglesas. La clase Box implementa dos interfaces, IEnglishDimensions e IMetricDimensions, que representan los diferentes sistemas de medida. Ambas interfaces tienen nombres de miembros idénticos, Length y Width.
Ejemplo
// Declare the English units interface:
interface IEnglishDimensions
{
float Length();
float Width();
}
// Declare the metric units interface:
interface IMetricDimensions
{
float Length();
float Width();
}
// Declare the Box class that implements the two interfaces:
// IEnglishDimensions and IMetricDimensions:
class Box : IEnglishDimensions, IMetricDimensions
{
float _lengthInches;
float _widthInches;
public Box(float lengthInches, float widthInches)
{
_lengthInches = lengthInches;
_widthInches = widthInches;
}
// Explicitly implement the members of IEnglishDimensions:
float IEnglishDimensions.Length() => _lengthInches;
float IEnglishDimensions.Width() => _widthInches;
// Explicitly implement the members of IMetricDimensions:
float IMetricDimensions.Length() => _lengthInches * 2.54f;
float IMetricDimensions.Width() => _widthInches * 2.54f;
static void Main()
{
// Declare a class instance box1:
Box box1 = new(30.0f, 20.0f);
// Declare an instance of the English units interface:
IEnglishDimensions eDimensions = box1;
// Declare an instance of the metric units interface:
IMetricDimensions mDimensions = box1;
// Print dimensions in English units:
Console.WriteLine($"Length(in): {eDimensions.Length()}");
Console.WriteLine($"Width (in): {eDimensions.Width()}");
// Print dimensions in metric units:
Console.WriteLine($"Length(cm): {mDimensions.Length()}");
Console.WriteLine($"Width (cm): {mDimensions.Width()}");
}
}
/* Output:
Length(in): 30
Width (in): 20
Length(cm): 76.2
Width (cm): 50.8
*/
Programación sólida
Si quiere realizar las medidas en unidades inglesas de manera predeterminada, implemente los métodos Length y Width con normalidad e implemente explícitamente los métodos Length y Width de la interfaz IMetricDimensions:
// Normal implementation:
public float Length() => _lengthInches;
public float Width() => _widthInches;
// Explicit implementation:
float IMetricDimensions.Length() => _lengthInches * 2.54f;
float IMetricDimensions.Width() => _widthInches * 2.54f;
En este caso, se puede tener acceso a las unidades inglesas desde la instancia de clase y acceso a las unidades métricas desde la instancia de interfaz:
public static void Test()
{
Box box1 = new(30.0f, 20.0f);
IMetricDimensions mDimensions = box1;
Console.WriteLine($"Length(in): {box1.Length()}");
Console.WriteLine($"Width (in): {box1.Width()}");
Console.WriteLine($"Length(cm): {mDimensions.Length()}");
Console.WriteLine($"Width (cm): {mDimensions.Width()}");
}