小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

C#擴(kuò)展方法學(xué)習(xí)筆記

 行者花雕 2020-05-08

    C#擴(kuò)展方法,簡(jiǎn)單的理解是不修改原來(lái)類(lèi)的源代碼的情況下,為某個(gè)類(lèi)添加某個(gè)方法。擴(kuò)展方法被定義為靜態(tài)方法,但它們是通過(guò)實(shí)例方法語(yǔ)法進(jìn)行調(diào)用的。它們的第一個(gè)參數(shù)指定該方法作用于哪個(gè)類(lèi)型,并且該參數(shù)以 this修飾符為前綴。

    有一個(gè)典型的應(yīng)用場(chǎng)景,就是程序二開(kāi)。比如別人的DLL不公開(kāi)源代碼,要想在DLL某個(gè)類(lèi)中添加一個(gè)新方法的話,是不太可能的。但是可以使用擴(kuò)展方法,達(dá)到類(lèi)似的目的。

    1、新建兩個(gè)類(lèi)文件:Rectangle、GenericClass。

    /// <summary>
    /// 自定義類(lèi)(長(zhǎng)方形)
    /// </summary>
    public class Rectangle
    {
        //屬性
        public double Width { get; set; } = 0;  //寬度
        public double Height { get; set; } = 0; //高度

        /// <summary>
        /// 構(gòu)造函數(shù)
        /// </summary>
        /// <param name="width"></param>
        /// <param name="height"></param>
        public Rectangle (double width,double height)
        {
            Width = width;
            Height = height;
        }

        /// <summary>
        /// 求周長(zhǎng)
        /// </summary>
        /// <returns></returns>
        public double GetPerimeter()
        {
            return (Width + Height) * 2;
        }
    }
    /// <summary>
    /// 泛型類(lèi)
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class GenericClass<T>
    {
        private T tobj;

        public GenericClass(T obj)
        {
            tobj = obj;
        }

        public T GetObject()
        {
            return tobj;
        }
    }

    2、新建一個(gè)WinForm程序,添加3個(gè)按鈕。

    3、下面就原生類(lèi)String、自定義類(lèi)、泛型類(lèi)三種類(lèi)進(jìn)行擴(kuò)展方法。新建一個(gè)類(lèi),命名為:ExtensionHelper。

    /// <summary>
    /// 類(lèi)必須是靜態(tài)類(lèi),方法必須為public static類(lèi)型,且參數(shù)使用this關(guān)鍵字。
    /// </summary>
    public static class ExtensionHelper
    {
        /// <summary>
        /// 原生類(lèi)String擴(kuò)展方法
        /// </summary>
        /// <param name="str"></param>
        public static void SayHello(this string str)
        {
            if (string.IsNullOrEmpty(str))
            {
                MessageBox.Show("Hello World.", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                MessageBox.Show(str, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        /// <summary>
        /// 自定義類(lèi)擴(kuò)展方法
        /// </summary>
        /// <param name="rect"></param>
        /// <returns></returns>
        public static double GetArea(this Rectangle rect)
        {
            return rect.Width * rect.Height;
        }

        /// <summary>
        /// 泛型類(lèi)擴(kuò)展方法
        /// </summary>
        /// <param name="gc"></param>
        /// <returns></returns>
        public static string Show (this GenericClass<string> gc)
        {
            return gc.GetObject().ToString();
        }
    }

    4、WinForm代碼如下:

        /// <summary>
        /// 原生類(lèi)String擴(kuò)展
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            string str = "";
            //string str = "Welcom to China.";
            str.SayHello();
        }

        /// <summary>
        /// 自定義類(lèi)擴(kuò)展
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            Rectangle rect = new Rectangle(10, 10);
            MessageBox.Show("長(zhǎng)方形的面積是:" + rect.GetArea().ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        /// <summary>
        /// 泛型類(lèi)擴(kuò)展
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            GenericClass<string> gc = new GenericClass<string>("這是一個(gè)泛型類(lèi)擴(kuò)展方法。");
            MessageBox.Show(gc.Show(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

    參考自:https://www.cnblogs.com/forever-Ys/p/10315830.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約