C#笔记(4)---面向对象--类与继承

通过一个实际例子,。


         public   class   Authenticator
        
{
        
/* MinPasswordLenth为静态字段或静态数据 ,本字段只存储一次(有关键字static)
           Password为实例字段或实例数据,创建多少该类的实例,本字段就存储几次(无关键字static)
            另一个重要区别,静态字段属于类,实例字段属于对象
        
*/

            
private static uint MinPasswordLenth=6//静态字段
            private string Password;//实例字段

            
/*无论实例方法还是静态方法,只存储一次,并与类相关.
             实例方法会利用一个隐式的外部参数(this),该参数引用相关类实例所在的内存。
             绝对不能显式这个外部参数,但它总是存在的。
             要访问实例字段,则不要加static.下面没使用static故可以访问Password实例字段!
             
*/


            
public bool IsPasswordCorrect(string password)
            
{
              
return (password==Password)?true:false;
            }

            
public  bool ChangePassword(string oldpassword,string newpassword)
            
{
                
if(oldpassword==Password)
                
{
                    Password
=newpassword;
                    
return true;
                }

                
else{return false;}
            }

            
/*静态方法,属于类而不是对象调用时直接用 [类.静态方法],标志是:static
             静态方法是不可以访问类的实例数据的,
             如:方法GetMinPasswordLength 是不可以访问实例字段 Password的
             
*/
 //[属性MinPasswordLenth的获取与设置]
            public static uint GetMinPasswordLength()
            
{
             
return MinPasswordLenth;
            }

            
public static void SetMinPasswordLength(uint value)
            
{
                MinPasswordLenth
=value;
            }

            
// 属性最好如下这样做[虽然与上面写两个方法的功能是一样],还比较符合常规:
            
//定义属性,get与set存取器
            public static uint MinLenth
            
{
            
/*注意:这里属性是静态的,一般是不必要的。同方法一样,只有属性指向静态数据时。
              才必须把属性声明为static,大多情况没这个必要。可以只有get或者只有set部分,但
              不建议这样!
             
*/

                
get
                
{
                  
return MinPasswordLenth;
                }

                
set
                
{
                 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
      {.........}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值