Maison > développement back-end > Tutoriel C#.Net > Surcharge d'opérateur C#

Surcharge d'opérateur C#

黄舟
Libérer: 2017-02-06 16:28:26
original
1146 Les gens l'ont consulté

Vous pouvez redéfinir ou surcharger les opérateurs intégrés en C#. Par conséquent, les programmeurs peuvent également utiliser des opérateurs de types définis par l’utilisateur. Un opérateur surchargé est une fonction portant un nom spécial, défini par le mot-clé opérateur suivi du symbole de l'opérateur. Comme les autres fonctions, les opérateurs surchargés ont un type de retour et une liste de paramètres.

Par exemple, jetez un œil à la fonction suivante :

public static Box operator+ (Box b, Box c){   
Box box = new Box();  
 box.length = b.length + c.length;   
 box.breadth = b.breadth + c.breadth;   
 box.height = b.height + c.height;   
 return box;}
Copier après la connexion

La fonction ci-dessus implémente l'opérateur d'addition ( ) pour la classe définie par l'utilisateur Box. Il ajoute les propriétés de deux objets Box et renvoie l'objet Box ajouté.

Implémentation de la surcharge d'opérateurs

Le programme suivant démontre l'implémentation complète :

using System;namespace OperatorOvlApplication{   
class Box   {      
private double length;      // 长度      
privatedouble breadth;     // 宽度      
private double height;      // 高度      
public double getVolume()      
{         
return length * breadth * height;      
}      
public void setLength( double len )      
{         
length = len;      
}      
public void setBreadth(double bre )      
{         
breadth = bre;      
}      
public void setHeight( double hei )      
{         
height = hei;      
}      
// 重载 + 运算符来把两个 Box 对象相加      
public static Box operator+ (Box b, Box c)      
{         
Box box = new Box();         
box.length = b.length + c.length;         
box.breadth = b.breadth + c.breadth;         
box.height = b.height + c.height;        
 return box;      
 }   
 }   
 class Tester   
 {      
 static void Main(string[] args)      
 {         
 Box Box1 = new Box();         
 // 声明 Box1,类型为 Box         
 Box Box2 = new Box();         
 // 声明 Box2,类型为 Box         
 Box Box3 = new Box();         
 // 声明 Box3,类型为 Box         
 double volume = 0.0;          
 // 体积         
 // Box1 详述         
 Box1.setLength(6.0);         
 Box1.setBreadth(7.0);         
 Box1.setHeight(5.0);         
 // Box2 详述         
 Box2.setLength(12.0);         
 Box2.setBreadth(13.0);         
 Box2.setHeight(10.0);         
 // Box1 的体积         
 volume = Box1.getVolume();         
 Console.WriteLine("Box1 的体积: {0}", volume);         
 // Box2 的体积         
 volume = Box2.getVolume();         
 Console.WriteLine("Box2 的体积: {0}", volume);         
 // 把两个对象相加         
 Box3 = Box1 + Box2;         
 // Box3 的体积         
 volume = Box3.getVolume();         
 Console.WriteLine("Box3 的体积: {0}", volume);         
 Console.ReadKey();      
 }   
 }
 }
Copier après la connexion

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants :

Box1 的体积: 210 Box2 的体积: 1560 Box3 的体积: 5400
Copier après la connexion

Opérateurs surchargeables et non surchargeables

Le tableau suivant décrit les capacités de surcharge d'opérateurs en C# :

运算符描述
, -, !, ~, , --这些一元运算符只有一个操作数,且可以被重载。
, -, *, /, %这些二元运算符带有两个操作数,且可以被重载。
==, !=, <, >, <=, >=这些比较运算符可以被重载
&&, ||这些条件逻辑运算符不能被直接重载。
=, -=, *=, /=, %=这些赋值运算符不能被重载。
=, ., ?:, ->, new, is, sizeof, typeof这些运算符不能被重载。

Instances

En réponse à la discussion ci-dessus, étendons l'exemple ci-dessus et surchargeons plus d'opérateurs :

using System;namespace OperatorOvlApplication{   
class Box    
{       
private double length;      // 长度       
privatedouble breadth;     // 宽度       
private double height;      // 高度             
public double getVolume()       {         
return length * breadth * height;       }      
public void setLength( double len )      {          
length = len;      }      
public void setBreadth( double bre )      {          breadth = bre;      }      
public void setHeight( double hei )      {          height = hei;      }      
// 重载 + 运算符来把两个 Box 对象相加      
public static Box operator+ (Box b, Box c)      {          
Box box = newBox();          
box.length = b.length + c.length;          
box.breadth = b.breadth + c.breadth;          
box.height = b.height + c.height;          
return box;      
}            
public static bool operator == (Box lhs, Box rhs)      {          
bool status = false;         
if (lhs.length == rhs.length && lhs.height == rhs.height             
&& lhs.breadth == rhs.breadth)          {              
status = true;          }         
 return status;      }      
public static bool operator !=(Box lhs, Box rhs)      {          
bool status = false;          
if (lhs.length != rhs.length || lhs.height != rhs.height              
|| lhs.breadth != rhs.breadth)          {              
status = true;          }          
return status;      }      
public static bool operator <(Box lhs, Box rhs)      {          
bool status =false;          
if (lhs.length < rhs.length && lhs.height              
< rhs.height && lhs.breadth < rhs.breadth)          {              
status = true;          }          
return status;      }      
public static bool operator >(Box lhs, Box rhs)      {          
bool status =false;          if (lhs.length > rhs.length && lhs.height             
 > rhs.height && lhs.breadth > rhs.breadth)          {              
 status = true;          }          return status;      }      
 public static bool operator <=(Box lhs, Box rhs)      {          
 bool status = false;          
 if (lhs.length <= rhs.length && lhs.height             
  <= rhs.height && lhs.breadth <= rhs.breadth)          {              
 status = true;          }          return status;      }     
  public static bool operator >=(Box lhs, Box rhs)      {          bool status = false;          
  if (lhs.length >= rhs.length && lhs.height             >= rhs.height && lhs.breadth >= rhs.breadth)          
  {              status = true;          }          return status;      }      
  public override string ToString()      {          
  returnString.Format("({0}, {1}, {2})", length, breadth, height);      }     
  }      
   class Tester   {      
   static void Main(string[] args)      {       
   Box Box1 = new Box();          
   // 声明 Box1,类型为 Box        
   Box Box2 = new Box();          
   // 声明 Box2,类型为 Box       
    Box Box3 = new Box();          
    // 声明 Box3,类型为 Box        
    Box Box4 = new Box();        
    double volume = 0.0;   
    // 体积        
    // Box1 详述        
    Box1.setLength(6.0);        
    Box1.setBreadth(7.0);        
    Box1.setHeight(5.0);        
    // Box2 详述        
    Box2.setLength(12.0);        
    Box2.setBreadth(13.0);        
    Box2.setHeight(10.0);       
    // 使用重载的 ToString() 显示两个盒子        
    Console.WriteLine("Box1: {0}", Box1.ToString());        
    Console.WriteLine("Box2: {0}", Box2.ToString());                
    // Box1 的体积        
    volume = Box1.getVolume();        
    Console.WriteLine("Box1 的体积: {0}", volume);        
    // Box2 的体积       
    volume = Box2.getVolume();        
    Console.WriteLine("Box2 的体积: {0}", volume);        
    // 把两个对象相加        
    Box3= Box1 + Box2;        
    Console.WriteLine("Box3: {0}", Box3.ToString());        
    // Box3 的体积        
    volume =Box3.getVolume();        
    Console.WriteLine("Box3 的体积: {0}", volume);        
    //comparing the boxes        
    if (Box1 >Box2)          
    Console.WriteLine("Box1 大于 Box2");        
    else          
    Console.WriteLine("Box1 不大于 Box2");        
    if (Box1 <Box2)          
    Console.WriteLine("Box1 小于 Box2");        
    else          
    Console.WriteLine("Box1 不小于 Box2");        
    if (Box1>= Box2)          
    Console.WriteLine("Box1 大于等于 Box2");        
    else          
    Console.WriteLine("Box1 不大于等于 Box2");        
    if (Box1 <= Box2)          
    Console.WriteLine("Box1 小于等于 Box2");        
    else          
    Console.WriteLine("Box1 不小于等于 Box2");        
    if (Box1 != Box2)          
    Console.WriteLine("Box1 不等于 Box2");        
    else          
    Console.WriteLine("Box1 等于 Box2");        
    Box4 = Box3;        
    if (Box3 == Box4)          
    Console.WriteLine("Box3 等于 Box4");        
    else          
    Console.WriteLine("Box3 不等于 Box4");        
    Console.ReadKey();      
    }    
    }
    }
Copier après la connexion

Lorsque le code ci-dessus est compilé et exécuté, il produira les résultats suivants :

Box1: (6, 7, 5) Box2: (12, 13, 10) Box1 的体积: 210 
Box2 的体积: 1560 Box3: (18, 20, 15) 
Box3 的体积: 5400 Box1 不大于 Box2 Box1 小于 Box2 Box1 不大于等于 Box2 Box1 小于等于 Box2 Box1 不等于 Box2 Box3 等于 Box4
Copier après la connexion

Le ci-dessus est le contenu de la surcharge de l'opérateur C#. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (m.sbmmt.com) !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal