explicit
- wykonuje się tylko przy rzutowaniu newObject = (newType)object
- gdy operator nie jest zdefiniowany, kompilator nie dopuści do konwersji
- definiowany jako public static explicit operator
public class Celsius { public float Value { get; set; } public static explicit operator Celsius(float v) { Console.WriteLine("explicit float -> Celsius"); return new Celsius() { Value = v }; } }
class Program { static void Main(string[] args) { int deg_int = 20; Console.WriteLine(); //explicit conversion Console.WriteLine("Celsius temp_Celsius = (Celsius)deg_int;"); Celsius temp_Celsius = (Celsius)deg_int; } }
implicit
- operator niejawnej konersji, np przy przypisaniu elementu jednego typu do drugiego, przy wywołaniu metod itd.
- kompilator nie dopuści do konwersji gdy nie zdefiniowaliśmy operatora
- definiowany jako public static explicit operator
public class Celsius { public float Value { get; set; } public static implicit operator double(Celsius v) { Console.WriteLine("implicit Celsius -> double"); return v.Value; } public static void Print(double d) { Console.WriteLine(d); } public static void Put(int i) { Console.WriteLine(i); } }
class Program { static void Main(string[] args) { Celsius temp_Celsius = new Celsius(){Value = 20}; //implicit conversion Console.WriteLine("double deg_double = temp_Celsius"); double deg_double = temp_Celsius; Console.WriteLine("Celsius.Print(temp_Celsius)"); Celsius.Print(temp_Celsius); Console.ReadLine(); } }
Brak komentarzy:
Prześlij komentarz