Najlepszy samouczek C # przeciążanie operatora W 2024 r. W tym samouczku możesz dowiedzieć się Operator przeciążenie osiągnąć,Doładować i non-przeciążone operatory,Przykłady,
Można zmienić lub zastąpić wbudowany operatora C #. Dlatego programiści mogą korzystać z operatorów typu zdefiniowanego przez użytkownika. Przeciążone operatorzy mają specjalną nazwę funkcji, a następnie definicji symbolu operatora Hasłooperatora.I inne funkcje, przeciążone operatory mają typ zwracany oraz listę parametrów.
Na przykład, rozważmy następującą funkcję:
public static Operator Box + (b Box, Box c) { box = new Box (); box.length = b.length + c.length; box.breadth = b.breadth + c.breadth; box.height = b.height + c.height; pole powrócić; }
Powyższa funkcja jest definiowana przez użytkownika klasy Box realizuje operatora dodawania (+). To jest własnością dwóch obiektów Box są dodawane i dodaniu obiektów skrzynce zwrotu.
Poniższy program pokazuje kompletną implementację:
using System; nazw OperatorOvlApplication { Klasa Box { prywatne długość dwukrotnie; // Długość prywatny pokój wszerz; // szerokość prywatne podwójna wysokość; // wysokość publicznej podwójne getVolume () { Długość powrotu * szerokość * wysokość; } public void setlength (podwójne len) { długość = len; } public void setBreadth (podwójne wyl) { Szerokość = BRE; } public void setHeight (podwójne hei) { height = hei; } // Przeciążone + operator sumy dwóch obiektów public static Box Operator Box + (b Box, Box c) { box = new Box (); box.length = b.length + c.length; box.breadth = b.breadth + c.breadth; box.height = b.height + c.height; pole powrócić; } } Klasa Tester { static void Main (string [] args) { Box Box1 = new Box (); // zadeklarować box1 typu Box Box Box2 = new Box (); // zadeklarować Box2 typu Box Box Box3 = new Box (); // zadeklarować Box3 typu Box podwójna objętość = 0,0; // // Box1 wyszczególnieniem Box1.setLength (6,0) objętości; Box1.setBreadth (7,0); Box1.setHeight (5,0); // Box2 wyszczególnieniem Box2.setLength (12,0); Box2.setBreadth (13,0); Box2.setHeight (10,0); // Wielkość Box1 objętości = Box1.getVolume (); Console.WriteLine ( "objętość Box1: {0}", objętość); // Wielkość Box2 objętości = Box2.getVolume (); Console.WriteLine ( "objętość Box2: {0}", objętość); // Oba obiekty są dodawane Box3 = Box1 + Box2; // Wielkość Box3 objętości = Box3.getVolume (); Console.WriteLine ( "objętość Box3: {0}", objętość); Console.ReadKey (); } } }
Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:
Objętość box1: 210 Objętość Box2: 1560 Objętość Box3: 5400
Poniższa tabela opisuje zdolność przeciążenia operatora C #:
运算符 | 描述 |
---|---|
+, -, !, ~, ++, -- | 这些一元运算符只有一个操作数,且可以被重载。 |
+, -, *, /, % | 这些二元运算符带有两个操作数,且可以被重载。 |
==, !=, <, >, <=, >= | 这些比较运算符可以被重载。 |
&&, || | 这些条件逻辑运算符不能被直接重载。 |
+=, -=, *=, /=, %= | 这些赋值运算符不能被重载。 |
=, ., ?:, ->, new, is, sizeof, typeof | 这些运算符不能被重载。 |
Na powyższej dyskusji, niech przedłużyć powyższy przykład, bardziej przeciążone operatory:
using System; nazw OperatorOvlApplication { Klasa Box { prywatne długość dwukrotnie; // Długość prywatny pokój wszerz; // szerokość prywatne podwójna wysokość; // wysokość publicznej podwójne getVolume () { Długość powrotu * szerokość * wysokość; } public void setlength (podwójne len) { długość = len; } public void setBreadth (podwójne wyl) { Szerokość = BRE; } public void setHeight (podwójne hei) { height = hei; } // Przeciążone + operator sumy dwóch obiektów public static Box Operator Box + (b Box, Box c) { box = new Box (); box.length = b.length + c.length; box.breadth = b.breadth + c.breadth; box.height = b.height + c.height; pole powrócić; } public static bool operator == (lewa Box, prawa oś Box) { Stan bool = false; if (lhs.length == rhs.length && lhs.height == rhs.height && Lhs.breadth == rhs.breadth) { status = true; } stan powrotu; } public = (lewa, prawa oś Box Box) static bool operator! { Stan bool = false; if (lhs.length! = rhs.length || lhs.height! = rhs.height || Lhs.breadth! = Rhs.breadth) { status = true; } stan powrotu; } public static bool operator <(lewa Box, prawa oś Box) { Stan bool = false; if (lhs.length <rhs.length && lhs.height <Rhs.height && lhs.breadth <rhs.breadth) { status = true; } stan powrotu; } public static bool operator> (lewa Box, prawa oś Box) { Stan bool = false; if (lhs.length> rhs.length && lhs.height > Rhs.height && lhs.breadth> rhs.breadth) { status = true; } stan powrotu; } public static bool operator <= (lewa oś Box, prawa oś Box) { Stan bool = false; if (lhs.length <= rhs.length && lhs.height <= Rhs.height && lhs.breadth <= rhs.breadth) { status = true; } stan powrotu; } public static bool operator> = (lewa oś Box, prawa oś box) { Stan bool = false; if (lhs.length> = rhs.length && lhs.height > = Rhs.height && lhs.breadth> = rhs.breadth) { status = true; } stan powrotu; } public override toString String () { powrót String.Format ( "({0} {1}, {2})", długość, szerokość, wysokość); } } Klasa Tester { static void Main (string [] args) { Box Box1 = new Box (); // zadeklarować box1 typu Box Box Box2 = new Box (); // zadeklarować Box2 typu Box Box Box3 = new Box (); // zadeklarować Box3 typu Box Box Box4 = new Box (); podwójna objętość = 0,0; // // Box1 wyszczególnieniem Box1.setLength (6,0) objętości; Box1.setBreadth (7,0); Box1.setHeight (5,0); // Box2 wyszczególnieniem Box2.setLength (12,0); Box2.setBreadth (13,0); Box2.setHeight (10,0); // Użyj przeciążony toString () wyświetla dwa pola Console.WriteLine ( "Box1: {0}", Box1.ToString ()); Console.WriteLine ( "Box2: {0}", Box2.ToString ()); // Wielkość Box1 objętości = Box1.getVolume (); Console.WriteLine ( "objętość Box1: {0}", objętość); // Wielkość Box2 objętości = Box2.getVolume (); Console.WriteLine ( "objętość Box2: {0}", objętość); // Oba obiekty są dodawane Box3 = Box1 + Box2; Console.WriteLine ( "Box3: {0}", Box3.ToString ()); // Wielkość Box3 objętości = Box3.getVolume (); Console.WriteLine ( "objętość Box3: {0}", objętość); // Porównując pola if (Box1> Box2) Console.WriteLine ( "Ramka 1 większa niż Box2"); więcej Console.WriteLine ( "box1 nie więcej niż Box2"); if (Box1 <Box2) Console.WriteLine ( "Box1 mniej niż Box2"); więcej Console.WriteLine ( "box1 nie mniej niż Box2"); if (Box1> = Box2) Console.WriteLine ( "Ramka 1 większa niż lub równa Box2"); więcej Console.WriteLine ( "Ramka 1 nie większa niż lub równa Box2"); if (Box1 <= Box2) Console.WriteLine ( "Box1 mniej Box2"); więcej Console.WriteLine ( "Box1 nie mniej Box2"); if (Box1! = Box2) Console.WriteLine ( "Box1 nie równa Box2"); więcej Console.WriteLine ( "Box1 równa Box2"); Box4 = Box3; if (Box3 == Box4) Console.WriteLine ( "Box3 równa Box4"); więcej Console.WriteLine ( "Box3 nie równa Box4"); Console.ReadKey (); } } }
Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:
Ramka 1 (6, 7, 5) Box2 (12, 13, 10) Objętość box1: 210 Objętość Box2: 1560 Box3 (18, 20, 15) Objętość Box3: 5400 Box1 Box2 nie więcej niż Box1 Box2 mniej niż Box1 Box2 nie jest większa niż lub równa Box1 Box2 mniej Box1 Box2 nie równa Box3 równa Box4