国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

C#運算符重載

2019-11-17 02:03:22
字體:
供稿:網(wǎng)友

C#運算符重載

1.運算符重載

通過運算符重載,可以對我們設(shè)計的類使用標(biāo)準(zhǔn)的運算符,例如+、-等。這稱為重載,因為在使用特定的參數(shù)類型時,我們?yōu)檫@些運算符提供了自己的實現(xiàn)代碼,其方式與重載方法相同,也是為同名方法提供不同的參數(shù)。

要重載運算符,可給類參加運算符類型成員(它們必須是static)。一些運算符有多種用途,因此我們還指定了要處理的多少個操作數(shù),以及這些操作數(shù)的類型,一般情況下,操作數(shù)的類型與定義運算符的類相同,但也可以定義處理混合類型的運算符。

例如,考慮一個簡單類型AddClass1,如下所示:

public class AddClass1{   public int val; }

這僅是int值得一個包裝器,但可以用于說明原理,對于這個類,下面的代碼不能編譯:

AddClass1 op1 =new AddClass1();op1.val= 3;AddClass1 op2 = new AddClass1();op2.val=5;AddClass1 op3 = op1+op2;

其錯誤是+運算符不能應(yīng)用于AddClass1類型的操作數(shù),因為我們尚未定義要執(zhí)行的操作。下面的代碼則可執(zhí)行,但無法得到預(yù)期結(jié)果:

AddClass1 op1 =new AddClass1();op1.val= 3;AddClass1 op2 = new AddClass1();op2.val=3;AddClass1 op3 = op1==op2;

其中,使用==運算符來比較op1和op2,看它們是否引用同一個對象,而不是驗證它們的值是否相等。在上述代碼中,即使op1.val和op2.val相等,op3也是false。

要重載+運算符,可使用如下代碼:

public class AddClass1{   public int val;     public static  AddClass1 Operator +(AddClass1 op1,AddClass1 op2)      {          AddClass1 returnVal= new AddClass1();          returnVal.val=op1.val+op2.val;              return returnVal;      }}

可以看出,運算符重載看起來與標(biāo)準(zhǔn)靜態(tài)方法類似,但它們使用關(guān)鍵字operator和運算符本身,而不是一個方法名。現(xiàn)在可以成功使用+運算符和這個類,如下面的示例所示:

AddClass1 op3 =op1+op2;

重載所有的運算符都是一樣的,一元運算符看起來也是類似的,但只有一個參數(shù):

public class AddClass1{   public int val;     public static  AddClass1 operator -(AddClass1 op1)      {          AddClass1 returnVal= new AddClass1();          returnVal.val=-op1.val;              return returnVal;      }}

這兩個運算符處理的操作數(shù)的類型與類相同,返回值也是該類型,但考慮下面的定義:

public class AddClass1 {       public int val;       public static AddClass3 operator +(AddClass1 op1,AddClass2 op2)       {            AddClass3 returnVal=new AddClass3();            returnVal.val=op1.val+op2.val;            return returnVal;       }    }public class AddClass2{       public int val;}public class AddClass3{       public int val; } 

考慮下面的代碼就可以執(zhí)行:

AddClass1 op1 = new AddClass1();op1.val=5;AddClass2 op2 = new AddClass2();op2.val=4;AddClass3 op3 =op1+op2;

要注意,如果把相同的運算符添加到AddClass2中,上面的代碼就會失敗,因為它弄不清要使用哪個運算符。因此,注意不要把簽名相同的運算符添加到多個類中。

還要注意,如果混合了類型,操作數(shù)的順序必須與運算符重載的參數(shù)順序相同,如果使用了重載的運算符和順序錯誤的操作數(shù),操作就會失敗。所以,不能像這樣使用運算符:

AddClass3 op3 =op2+op1;

當(dāng)然,除非提供了另一個重載運算符和倒序的參數(shù):

  public static AddClass3 operator +(AddClass2 op2,AddClass1 op1)       {            AddClass3 returnVal=new AddClass3();            returnVal.val=op1.val+op2.val;            return returnVal;       }    


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 宜君县| 廉江市| 洞口县| 延吉市| 阆中市| 怀仁县| 甘南县| 云龙县| 汉寿县| 虹口区| 绵竹市| 瑞昌市| 漠河县| 云浮市| 资兴市| 云阳县| 嘉鱼县| 鄱阳县| 壶关县| 隆德县| 离岛区| 正阳县| 娄烦县| 宜章县| 雷波县| 凤庆县| 康平县| 文安县| 苍南县| 潮安县| 张家川| 淮北市| 长垣县| 靖西县| 莱芜市| 新余市| 大关县| 扎兰屯市| 镇康县| 隆德县| 台南市|