Két felület tagjainak explicit implementálása (C# programozási útmutató)
Cikk
Az explicit felület implementálása lehetővé teszi a programozó számára, hogy két olyan felületet implementáljon, amelyek azonos tagnevekkel rendelkeznek, és minden felülettagnak külön implementációt adjon. Ez a példa egy mező méreteit jeleníti meg metrika- és angol mértékegységekben is. A Box osztály két IEnglishDimensions és IMetricDimensions interfészt implementál, amelyek a különböző mérési rendszereket képviselik. Mindkét felület azonos tagnevekkel rendelkezik, hossz és szélesség.
Példa
// 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
*/
Robusztus programozás
Ha az alapértelmezett méréseket angol mértékegységekben szeretné elvégezni, a Hossz és szélesség metódusokat a szokásos módon implementálja, és explicit módon implementálja a Hossz és szélesség metódusokat az IMetricDimensions felületről:
// Normal implementation:
public float Length() => _lengthInches;
public float Width() => _widthInches;
// Explicit implementation:
float IMetricDimensions.Length() => _lengthInches * 2.54f;
float IMetricDimensions.Width() => _widthInches * 2.54f;
Ebben az esetben az angol egységeket az osztálypéldányból érheti el, és a metrikaegységeket a felületpéldányból érheti el:
A tartalom forrása a GitHubon található, ahol létrehozhat és áttekinthet problémákat és lekéréses kérelmeket is. További információért tekintse meg a közreműködői útmutatónkat.
.NET-visszajelzés
A(z) .NET egy nyílt forráskód projekt. Visszajelzés adásához válasszon egy hivatkozást:
In this module, you explore advanced concepts of interfaces in C#. You learn how to implement explicit interface members, combine multiple interfaces, and reduce code dependencies using interfaces.
Az osztály olyan illesztőket implementálhat, amelyek azonos aláírással rendelkező tagot tartalmaznak a C#-ban. Az explicit implementáció egy adott felülethez tartozó osztálytagot hoz létre.
Az interfész kulcsszóval definiálhatja azokat a szerződéseket, amelyeket bármely implementálási típusnak támogatnia kell. Az interfészek lehetővé teszik a nem kapcsolódó típusok közös viselkedésének létrehozását.
Ez a funkcióspecifikáció az alapértelmezett felületi metódusok támogatásához szükséges szintaxisfrissítéseket ismerteti. Ez magában foglalja a felületi deklarációkban szereplő deklaráló szerveket, valamint a deklarációk támogató módosítóit.