通过一个实际例子,。
    public class  Authenticator
        public class  Authenticator
 {
        {
 /* MinPasswordLenth为静态字段或静态数据 ,本字段只存储一次(有关键字static)
        /* MinPasswordLenth为静态字段或静态数据 ,本字段只存储一次(有关键字static)
 Password为实例字段或实例数据,创建多少该类的实例,本字段就存储几次(无关键字static)
           Password为实例字段或实例数据,创建多少该类的实例,本字段就存储几次(无关键字static)
 另一个重要区别,静态字段属于类,实例字段属于对象
            另一个重要区别,静态字段属于类,实例字段属于对象
 */
        */
 private static uint MinPasswordLenth=6; //静态字段
            private static uint MinPasswordLenth=6; //静态字段
 private string Password;//实例字段
            private string Password;//实例字段
 
 /*无论实例方法还是静态方法,只存储一次,并与类相关.
            /*无论实例方法还是静态方法,只存储一次,并与类相关.
 实例方法会利用一个隐式的外部参数(this),该参数引用相关类实例所在的内存。
             实例方法会利用一个隐式的外部参数(this),该参数引用相关类实例所在的内存。
 绝对不能显式这个外部参数,但它总是存在的。
             绝对不能显式这个外部参数,但它总是存在的。
 要访问实例字段,则不要加static.下面没使用static故可以访问Password实例字段!
             要访问实例字段,则不要加static.下面没使用static故可以访问Password实例字段!
 */
             */
 
 public bool IsPasswordCorrect(string password)
            public bool IsPasswordCorrect(string password)
 {
            {
 return (password==Password)?true:false;
              return (password==Password)?true:false;
 }
            }
 public  bool ChangePassword(string oldpassword,string newpassword)
            public  bool ChangePassword(string oldpassword,string newpassword)
 {
            {
 if(oldpassword==Password)
                if(oldpassword==Password)
 {
                {
 Password=newpassword;
                    Password=newpassword;
 return true;
                    return true;
 }
                }
 else{return false;}
                else{return false;}
 }
            }
 /*静态方法,属于类而不是对象调用时直接用 [类.静态方法],标志是:static
            /*静态方法,属于类而不是对象调用时直接用 [类.静态方法],标志是:static
 静态方法是不可以访问类的实例数据的,
             静态方法是不可以访问类的实例数据的,
 如:方法GetMinPasswordLength 是不可以访问实例字段 Password的
             如:方法GetMinPasswordLength 是不可以访问实例字段 Password的
 */ //[属性MinPasswordLenth的获取与设置]
             */ //[属性MinPasswordLenth的获取与设置]
 public static uint GetMinPasswordLength()
            public static uint GetMinPasswordLength()
 {
            {
 return MinPasswordLenth;
             return MinPasswordLenth;
 }
            }
 public static void SetMinPasswordLength(uint value)
            public static void SetMinPasswordLength(uint value)
 {
            {
 MinPasswordLenth=value;
                MinPasswordLenth=value;
 }
            }
 // 属性最好如下这样做[虽然与上面写两个方法的功能是一样],还比较符合常规:
            // 属性最好如下这样做[虽然与上面写两个方法的功能是一样],还比较符合常规:
 //定义属性,get与set存取器
            //定义属性,get与set存取器
 public static uint MinLenth
            public static uint MinLenth
 {
            {
 /*注意:这里属性是静态的,一般是不必要的。同方法一样,只有属性指向静态数据时。
            /*注意:这里属性是静态的,一般是不必要的。同方法一样,只有属性指向静态数据时。
 才必须把属性声明为static,大多情况没这个必要。可以只有get或者只有set部分,但
              才必须把属性声明为static,大多情况没这个必要。可以只有get或者只有set部分,但
 不建议这样!
              不建议这样!
 */
             */
 get
                get
 {
                {
 return MinPasswordLenth;
                  return MinPasswordLenth;
 }
                }
 set
                set
 {
                {
 MinPasswordLenth=value;
                 MinPasswordLenth=value;
 }
                }
 }
             }
 }
        }
   
 public class  Authenticator
        public class  Authenticator
 {
        {
 /* MinPasswordLenth为静态字段或静态数据 ,本字段只存储一次(有关键字static)
        /* MinPasswordLenth为静态字段或静态数据 ,本字段只存储一次(有关键字static)
 Password为实例字段或实例数据,创建多少该类的实例,本字段就存储几次(无关键字static)
           Password为实例字段或实例数据,创建多少该类的实例,本字段就存储几次(无关键字static)
 另一个重要区别,静态字段属于类,实例字段属于对象
            另一个重要区别,静态字段属于类,实例字段属于对象
 */
        */
 private static uint MinPasswordLenth=6; //静态字段
            private static uint MinPasswordLenth=6; //静态字段
 private string Password;//实例字段
            private string Password;//实例字段
 
 /*无论实例方法还是静态方法,只存储一次,并与类相关.
            /*无论实例方法还是静态方法,只存储一次,并与类相关.
 实例方法会利用一个隐式的外部参数(this),该参数引用相关类实例所在的内存。
             实例方法会利用一个隐式的外部参数(this),该参数引用相关类实例所在的内存。
 绝对不能显式这个外部参数,但它总是存在的。
             绝对不能显式这个外部参数,但它总是存在的。
 要访问实例字段,则不要加static.下面没使用static故可以访问Password实例字段!
             要访问实例字段,则不要加static.下面没使用static故可以访问Password实例字段!
 */
             */
 
 public bool IsPasswordCorrect(string password)
            public bool IsPasswordCorrect(string password)
 {
            {
 return (password==Password)?true:false;
              return (password==Password)?true:false;
 }
            }
 public  bool ChangePassword(string oldpassword,string newpassword)
            public  bool ChangePassword(string oldpassword,string newpassword)
 {
            {
 if(oldpassword==Password)
                if(oldpassword==Password)
 {
                {
 Password=newpassword;
                    Password=newpassword;
 return true;
                    return true;
 }
                }
 else{return false;}
                else{return false;}
 }
            }
 /*静态方法,属于类而不是对象调用时直接用 [类.静态方法],标志是:static
            /*静态方法,属于类而不是对象调用时直接用 [类.静态方法],标志是:static
 静态方法是不可以访问类的实例数据的,
             静态方法是不可以访问类的实例数据的,
 如:方法GetMinPasswordLength 是不可以访问实例字段 Password的
             如:方法GetMinPasswordLength 是不可以访问实例字段 Password的
 */ //[属性MinPasswordLenth的获取与设置]
             */ //[属性MinPasswordLenth的获取与设置]
 public static uint GetMinPasswordLength()
            public static uint GetMinPasswordLength()
 {
            {
 return MinPasswordLenth;
             return MinPasswordLenth;
 }
            }
 public static void SetMinPasswordLength(uint value)
            public static void SetMinPasswordLength(uint value)
 {
            {
 MinPasswordLenth=value;
                MinPasswordLenth=value;
 }
            }
 // 属性最好如下这样做[虽然与上面写两个方法的功能是一样],还比较符合常规:
            // 属性最好如下这样做[虽然与上面写两个方法的功能是一样],还比较符合常规:
 //定义属性,get与set存取器
            //定义属性,get与set存取器
 public static uint MinLenth
            public static uint MinLenth
 {
            {
 /*注意:这里属性是静态的,一般是不必要的。同方法一样,只有属性指向静态数据时。
            /*注意:这里属性是静态的,一般是不必要的。同方法一样,只有属性指向静态数据时。
 才必须把属性声明为static,大多情况没这个必要。可以只有get或者只有set部分,但
              才必须把属性声明为static,大多情况没这个必要。可以只有get或者只有set部分,但
 不建议这样!
              不建议这样!
 */
             */
 get
                get
 {
                {
 return MinPasswordLenth;
                  return MinPasswordLenth;
 }
                }
 set
                set
 {
                {
 MinPasswordLenth=value;
                 MinPasswordLenth=value;
 }
                }
 }
             }
 }
        }
   
引用类型和值类型
把一个变量声明为基本的预定义类型时,例如int,uint,double,float和bool等,就实例化了
一个值类型的变量。每个变量都包含它自己的数据副本。
如: int i=10;
     int j,k;
     j=i;
     k=10;  //此时均为10 
     ++j;  //此时只有j为11,i,k仍旧为10
#类都是引用类型的,这样每个变量都只包含存储类实例的内存的引用,而不是创建这个实例
 的实际数据的引用。这是实例化类时为什么使用new运算符的原因。
 如: authenticator User1;
      authenticator User2=new authenticator();
      authenticator User3=new authenticator();
      User1=User2;
      User2.SetPassword(null,"abc");
      User3.SetPassword(null,"abc");
      if(User2==User3) //虽然具有相同的新密码,但返回false,执行else部分。
      {.........}
      else
      {.........}
      if(User1==User2)//返回true,因为User1与User2指向内存中相同的地址。
      {.........}
      else
      {.........}
 
                    
                 
        
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号