.NET/C# 类构造函数中this的用法 (转)

  在C#中this用来指代当前对象,用于当成员函数中的形参名跟成员变量名一致时,进行区分。函数

  但this不单单只有这一做用,this还能够以下这样用:this

    class class1
    {
        private int i_a;
        private string s_a;

        public class1()
        {
            i_a = 0;
            s_a = "default";
        }

        public class1(int i_a)
        {
            if (i_a > 5 && i_a < 10)
            {
                this.i_a = i_a;
            }
            s_a = "defalt";
        }

        public class1(string s_a)
        {
            this.i_a = 0;
            this.s_a = s_a;
        }
        public class1(int i_a, string s_a)
        {
            if (i_a > 5 && i_a < 10)
            {
                this.i_a = i_a;
            }
            this.s_a = s_a;
        }

        public void print()
        {
            Console.WriteLine("i_a = {0}", i_a);
            Console.WriteLine("s_a = {0}", s_a);
        }
   }

 注意到,这个对成员变量i_a的值的鉴定操做在第2跟第4个构造函数中重复了两次,若是这个操做复杂一点,这样的变量多一点,那重复代码就大大增长,影响了代码的维护性,一旦这个操做规则变化了,改动起来就比较麻烦,因此好的方法固然是将这个鉴定操做提取出来,放到一个单独的函数中,而后统一调用,不过C#还提供了这样一种机制来,以下:对象

    class class1
    {
        private int i_a;
        private string s_a;

        public class1()
        {
            i_a = 0;
            s_a = "default";
        }

        public class1(int i_a):this(i_a,"default"){}

        public class1(string s_a):this(0,s_a){}

        public class1(int i_a, string s_a)
        {
            if (i_a > 5 && i_a < 10)
            {
                this.i_a = i_a;
            }
            this.s_a = s_a;
        }

        public void print()
        {
            Console.WriteLine("i_a = {0}", i_a);
            Console.WriteLine("s_a = {0}", s_a);
        }
   }

 另外,this还能够用在索引器中。blog

相关文章
相关标签/搜索