zoukankan      html  css  js  c++  java
  • .NET/C# 类构造函数中this的用法 (转)

      在C#中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还可以用在索引器中。

  • 相关阅读:
    旧文备份:CANopen协议PDO的几种传输方式
    CANopen 基础
    单片机FLASH与RAM、ROM的关系
    在CANopen网络中通过LSS服务设置节点地址和网络波特率
    STM32F103 CAN中断发送功能的再次讨论
    由RS-232串口到PROFIBUS-DP总线的转换接口设计
    profibus 的DPV0 和DPV1
    PROFIBUS-DP
    profibus总线和profibus dp的区别
    获取验证码倒计时
  • 原文地址:https://www.cnblogs.com/macavalier/p/4468778.html
Copyright © 2011-2022 走看看