C# this關鍵字的三種用法


用法1 this代表當前類的實例對象 當我們定義了一個類的全局變量時 而該類方法中也聲明了相同的參數名時 如何區分兩個相同參數名稱的調用 使用this可以更直觀地看到this.參數名 為全局參數。

首先聲明一個類

 public class TestThisClass
    {
        //用法一 this代表當前類的實例對象
        private string scope = "全局變量";
        public string getResult()
        {
            string scope = "局部變量";
            // this代表TestThisClass的實例對象
            // 所以this.scope對應的是全局變量
            // scope對應的是getResult方法內的局部變量
            return this.scope + "-" + scope;
        }
    }

我在mian函數中使用

   public static void Main(string[] args)
{

            //用法一 this代表當前類的實例對象
            TestThisClass testThisClass = new TestThisClass();
            Console.WriteLine(testThisClass.getResult());

}

輸出結果 注意是先全局變量再局部變量

用法2 用this串聯構造函數 (:this()方法) 目的是為了實例化該類時 還會先自動調用一次base()中對應參數的方法類 再繼續執行原本的方法

首先聲明一個類

    public class TsetThisCLClass
    {
        public TsetThisCLClass()
        {
            Console.WriteLine("無參構造函數");
        }
        // this()對應有兩個參構造方法TsetThisCLClass(string text, string text2)
        // 先執行TsetThisCLClass(string text, string text2),后執行TsetThisCLClass(string text)
        public TsetThisCLClass(string text) : this("李四", text)
        {
            Console.WriteLine(text);
            Console.WriteLine("有參構造函數");
        }

        public TsetThisCLClass(string text, string text2)
        {
            Console.WriteLine(text + text2);
            Console.WriteLine("有兩個參數的參構造函數");
        }
    }

我在mian函數中使用

         //用法二  用this串聯構造函數  (:base()方法)
            TsetThisCLClass test = new TsetThisCLClass("張三");

輸出結果 注意是先輸出base中帶兩個參數的方法 再輸出本身

用法3 為原始類型擴展方法 主要是用來我們平時經常用到的類型 (string,object)

首先聲明一個擴展類

  public static class Extends
    {
        // string類型擴展ToJson方法
        public static object stringToJson(this string Json)
        {
            return Json == null ? null : JsonConvert.DeserializeObject(Json);
        }
        // object類型擴展ToJson方法
        public static string objectToJson(this object obj)
        {
            var timeConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" };
            return JsonConvert.SerializeObject(obj, timeConverter);
        }
    }

具體調用

            object a = "asjfh";
            string b = "afsdd";
            a.objectToJson(); //這里的a是object類型 他可直接調用擴展方法 this object方法中聲明的內容 
            b.stringToJson(); //這里的b是string類型 他可直接調用擴展方法 this string方法中聲明的內容

舉個例子 .net core注入配置文件 使用this 方法

        public void ConfigureServices(IServiceCollection services)
        {
                var builder = new ConfigurationBuilder();
                builder.AddJsonFile($"{AppDomain.CurrentDomain.BaseDirectory}/A.json", false, true);
                var config = builder.Build();
                services.AddAlhgInfoConf(config);//調用下面的方法 
        }

再聲明一個方法

         //這里的方法 聲明了參數 this IServiceCollection services 所以上面的services可以直接調用AddAlhgInfoConf該方法 這是屬於this的擴展方法
        public static IServiceCollection AddAlhgInfoConf(this IServiceCollection services, IConfiguration configuration)
        {
            services.Configure<AlhgInfoConf>(configuration);
            return services;
        }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM