C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
Here: These explicit operators are implemented by constructing a new instance of the target type.
And: They set the Name property. Thus the Apartment or House is now of the opposite type but has the same data field.
Info: When you use a cast like (Apartment) or (House), this is an explicit cast. An implicit cast never uses this syntax.
CastsC# program that uses explicit keyword
using System;
class Apartment
{
public string Name { get; set; }
public static explicit operator House(Apartment a)
{
return new House() { Name = a.Name };
}
}
class House
{
public string Name { get; set; }
public static explicit operator Apartment(House h)
{
return new Apartment() { Name = h.Name };
}
}
class Program
{
static void Main()
{
House h = new House();
h.Name = "Broadway";
// Cast a House to an Apartment.
Apartment a = (Apartment)h;
// Apartment was converted from House.
Console.WriteLine(a.Name);
}
}
Output
Broadway
Tip: Implicit requires a public static method that returns the type you want to convert to and accepts the type you are converting from.
Next: We provide a Machine class and a Widget class. Both classes have implicit conversion operators.
Operators: The implicit operators here convert the Machine and Widget types by manipulating their _value fields.
And: The Widget and Machine may be conceptually equal but have a different representation of their data.
C# program that uses implicit operator
using System;
class Machine
{
public int _value;
public static implicit operator Widget(Machine m)
{
Widget w = new Widget();
w._value = m._value * 2;
return w;
}
}
class Widget
{
public int _value;
public static implicit operator Machine(Widget w)
{
Machine m = new Machine();
m._value = w._value / 2;
return m;
}
}
class Program
{
static void Main()
{
Machine m = new Machine();
m._value = 5;
Console.WriteLine(m._value);
// Implicit conversion from machine to widget.
Widget w = m;
Console.WriteLine(w._value);
// Implicit conversion from widget to machine.
Machine m2 = w;
Console.WriteLine(m2._value);
}
}
Output
5
10
5
However: For classes such as Apartment or House, an explicit operator is not normally needed or useful.
And: The example here is for illustrative purposes. Explicit should be rarely used.
Thus: Implicit is not something that most programs will require. It is worth knowing it exists, but not often useful.