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

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

C#高級(jí)編程(第8版)——委托聲明、使用(第一節(jié))

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

C#高級(jí)編程(第8版)——委托聲明、使用(第一節(jié))

首先,聲明一個(gè)Currency的結(jié)構(gòu)。Currency結(jié)構(gòu)有自己的ToString()重載方法和一個(gè)與GetCurrencyUnit()的簽名相同的靜態(tài)方法。這樣,就可以用同一個(gè)委托變量調(diào)用這些方法了:

 struct Currency    {        public uint Dollars;        public ushort Cents;        public Currency(uint dollars, ushort cents)        {            this.Dollars = dollars;            this.Cents = cents;        }        public override string ToString()        {            return string.Format("${0}.{1,-2:00}", Dollars, Cents);        }        public static string GetCurrencyUnit()        {            return "Dollar";        }        public static explicit Operator Currency(float value)        {            checked            {                uint dollars = (uint)value;                ushort cents = (ushort)((value - dollars) * 100);                return new Currency(dollars, cents);            }        }        public static implicit operator float(Currency value)        {            return value.Dollars + (value.Cents / 100.0f);        }        public static implicit operator Currency(uint value)        {            return new Currency(value, 0);        }        public static implicit operator uint(Currency value)        {            return value.Dollars;        }    }

下面就是GetString實(shí)例,代碼如下:

 PRivate delegate string GetAString();        static void Main()        {            int x = 40;            GetAString firstStringMethod = x.ToString;            Console.WriteLine("String is {0}", firstStringMethod());            Currency balance = new Currency(34, 50);            // firstStringMethod references an instance method            firstStringMethod = balance.ToString;            Console.WriteLine("String is {0}", firstStringMethod());            // firstStringMethod references a static method            firstStringMethod = new GetAString(Currency.GetCurrencyUnit);            Console.WriteLine("String is {0}", firstStringMethod());        }

  這段代碼說明了如何通過委托調(diào)用方法,然后重新給委托指定在類的不同實(shí)例上的引用的不同方法,甚至可以指定靜態(tài)方法,或者在類的不同類型的實(shí)例上引用的方法。只要每個(gè)方法的簽名匹配委托定義即可。

運(yùn)行上面的程序,會(huì)得到委托引用的不同方法的輸出結(jié)果:

String is 40

String is$34.50

String is Dollar

但是,我們實(shí)際上還沒有說明把一個(gè)委托傳遞給另外一個(gè)方法的具體過程,也沒有得到任何特別有用的結(jié)果。調(diào)用int和Currency對(duì)象的ToString()的方法要比使用委托直觀的多!!! 但是,需要用一個(gè)相當(dāng)復(fù)雜的的示例來說明委托的本質(zhì),才能真正領(lǐng)悟到委托的用處。等到下一節(jié),書中就會(huì)給出兩個(gè)委托的示例。第一個(gè)示例僅使用委托調(diào)用兩個(gè)不同的操作。他說明了如何把委托傳遞給方法,如何使用委托數(shù)組,但是這仍然沒有很好的說明:沒有委托,就不能完成很多工作。第二個(gè)示例就復(fù)雜得多了,它有一個(gè)類BubbleSorter,這個(gè)類實(shí)現(xiàn)了一個(gè)方法,按照升序排列一個(gè)對(duì)象數(shù)組。沒有委托是很難編寫出這個(gè)類的!!!(詳見下一節(jié))


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新邵县| 玉林市| 兴海县| 怀远县| 德惠市| 丹江口市| 吴江市| 阜阳市| 丹棱县| 铅山县| 威远县| 邮箱| 武宁县| 阳东县| 浏阳市| 昌乐县| 娄烦县| 渭南市| 荆州市| 织金县| 社会| 大关县| 上虞市| 繁峙县| 南江县| 石城县| 广元市| 任丘市| 洞头县| 台南县| 永城市| 郴州市| 儋州市| 泸水县| 哈密市| 托克逊县| 额尔古纳市| 乐至县| 布拖县| 长宁县| 庐江县|