程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#關鍵字operator

C#關鍵字operator

編輯:C#入門知識

perator
operator 關鍵字用於在類或結構聲明中聲明運算符。運算符聲明可以采用下列四種形式之一:
public static result-type operator unary-operator ( op-type operand )
public static result-type operator binary-operator ( op-type operand, op-type2 operand2 )
public static implicit operator conv-type-out ( conv-type-in operand )
public static explicit operator conv-type-out ( conv-type-in operand )
參數:

result-type 運算符的結果類型。
unary-operator 下列運算符之一:+ - ! ~ ++ — true false
op-type 第一個(或唯一一個)參數的類型。
operand 第一個(或唯一一個)參數的名稱。
binary-operator 其中一個:+ - * / % & | ^ << >> == != > < >= <=
op-type2 第二個參數的類型。
operand2 第二個參數的名稱。
conv-type-out 類型轉換運算符的目標類型。
conv-type-in 類型轉換運算符的輸入類型。
注意:

前兩種形式聲明了用戶定義的重載內置運算符的運算符。並非所有內置運算符都可以被重載(請參見可重載的運算符)。op-type 和 op-type2 中至少有一個必須是封閉類型(即運算符所屬的類型,或理解為自定義的類型)。例如,這將防止重定義整數加法運算符。
後兩種形式聲明了轉換運算符。conv-type-in 和 conv-type-out 中正好有一個必須是封閉類型(即,轉換運算符只能從它的封閉類型轉換為其他某個類型,或從其他某個類型轉換為它的封閉類型)。
運算符只能采用值參數,不能采用 ref 或 out 參數。
C# 要求成對重載比較運算符。如果重載了==,則也必須重載!=,否則產生編譯錯誤。同時,比較運算符必須返回bool類型的值,這是與其他算術運算符的根本區別。
C# 不允許重載=運算符,但如果重載例如+運算符,編譯器會自動使用+運算符的重載來執行+=運算符的操作。
運算符重載的其實就是函數重載。首先通過指定的運算表達式調用對應的運算符函數,然後再將運算對象轉化為運算符函數的實參,接著根據實參的類型來確定需要調用的函數的重載,這個過程是由編譯器完成。
任何運算符聲明的前面都可以有一個可選的屬性(C# 編程指南)列表。

using System;
using System.Collections.Generic;
using System.Text;

namespace OperatorOverLoading
{
    class Program
    {
        static void Main(string[] args)
        {
            Student s1 = new Student(20, "Tom");
            Student s2 = new Student(18, "Jack");
            Student s3 = s1 + s2;

            s3.sayPlus();
            (s1 - s2).sayMinus();
            Console.ReadKey();
        }
    }
    public class Student
    {
        public Student() { }
        public Student(int age, string name)
        {
            this.name = name;
            this.age = age;

        }
        private string name;
        private int age;

        public void sayPlus()
        {
            System.Console.WriteLine("{0} 年齡之和為:{1}", this.name, this.age);

        }
        public void sayMinus() {
            System.Console.WriteLine("{0} 年齡之差為:{1}", this.name, this.age);
        }
        //覆蓋“+”操作符
        public static Student operator +(Student s1, Student s2)
        {
            return new Student(s1.age + s2.age, s1.name + " And " + s2.name);

        }
        //覆蓋“-”操作符
        public static Student operator -(Student s1, Student s2) {
            return new Student(Math.Abs(s1.age - s2.age), s1.name + "And" + s2.name);
        }

 
   }
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved